解决方案 »
- winform 如何把父窗体的bool变量值传到子窗体
- 怎么判断webBrowser控件里加载的页面里checkbox表单默认勾选
- c# datagridview 中 如何在复选框列的列头也加上复选框
- 用wmi能否求得硬盘的物理ID?
- 急:请问啥高清压缩编码效率高?
- 怎样创建时间Time1类Hour、Minute、Second,它们用于表示采取统一时间格式(24小时制)的一个时间。并定义一个不含参数的ToUniwersalString方法,该方法采取统一的格式返回一个字符串,它包括6个数位——两个用于表示时间,两个用于
- C#POST返回的数据中文出现乱码
- 如何通过 可执行文件 的软件名称 来 获取他所在 电脑上的绝对路径
- 关于向大段文字中插字符串的高效率算法问题,在线
- 帮帮我好吗?
- Visual C Sharp...问题...我的项目在两天前...当运行程序...只要鼠标经过项目中的任何一个窗体..鼠标都看不见...啥回事?
- 新手请教有关实例化和虚方法的问题,谢谢!
SqlCommand CMD = new SqlCommand(Sp,DBCN);
CMD.CommandType =
public static void InsertGMonitorLog(int sysPrgId,string logType,ing logOperationMsg)
{
SqlConnection myConn = new SqlConnection(strConn);
SqlCommand myComm = new SqlCommand("PUB_SYS_LOG",myConn);
myComm.CommandType = CommandType.StoredProcedure; SqlParameter myPara = new SqlParameter("@SYS_PRG_ID",SqlDbType.Int);
myPara.Value = sysPrgId;
myComm.Parameters.Add(myPara); myPara = new SqlParameter("@LOG_TYPE",SqlDbType.VarChar,3);
myPara.Value = logType;
myComm.Parameters.Add(myPara); myPara = new SqlParameter("@LOG_OPERATION_MSG",SqlDbType.VarChar,50);
myPara.Value = logOperationMsg;
myComm.Parameters.Add(myPara);
try
{
myConn.Open();
myComm.ExecuteNonQuery();
}
catch(SqlException e)
{
e.ToString();
}
finally
{
myConn.Close();
}
}Creating an ADO.NET Universal Data Wrapper
http://www.15seconds.com/issue/040127.htm
http://blog.csdn.net/zhzuo/archive/2004/08/06/67016.aspx
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
1.不带参数的存储过程调用:
如果存储过程名称为 up_GetUsers ,内容是select * from [User],
对应的调用方式是:
SqlCommand mycom= new SqlCommand("up_GetUsers",myConnection);
mycom.CommandType=CommandType.StoredProcedure;//这里与执行sql语句不一样哦。
myReader=null; //之前要建立reader
try{
myConnection.Open();
myReader=mycom.ExecuteReader();//这里可以加上结束动作,关闭数据库
}catch(....){....}
最后别忘记关闭数据库和SqlDataReader等(如果有的话)
2.带输入参数的存储过程调用
如果存储过程名称为 up_GetUser ,
内容是
CREATE PROCEDURE up_GetUser
( @uid int ) AS
select * from [User] where UserID=@uid,
有一个 输入 参数 @uid
对应的调用方式是:
//之前建立SqlDataConnection
SqlCommand mycom= new SqlCommand("up_GetUser",myConnection);
mycom.CommandType=CommandType.StoredProcedure;
//以下三行增加了一个输入参数,要增加几个要符合存储过程的参数个数;
mycom.Parameters.Add("@uid",SqlDbType.Int); //参数名称和类型要和存储过程里的一样
mycom.Parameters["@uid"].Direction=ParameterDirection.Input; //参数方向
mycom.Parameters["@uid"].Value=11; //这里 给出 参数的值
//这里有些是枚举,不用强记,如SqlDbType和ParameterDirection等,用VS的智能感应方便输入 //还有一种增加参数的方式
Parameter myParam1=new Parameter("@uid");
myParam1.Direction=....
myParam1.Value=...
mycom.Parameters.Add(myParam1);
//这种方式方便对单个参数的操作和说明
myReader=null; //之前要建立reader
try{
myConnection.Open();
myReader=mycom.ExecuteReader();//这里可以加上结束动作,关闭数据库
}catch(....){....}
最后别忘记关闭数据库和SqlDataReader等(如果有的话)3.带输出的存储过程的调用 如果存储过程末尾带 return @xxx 语句,就是可以返回值。
用一个变量tmp=(转型)mycom.ExecuteNonQuery();即可接受返回值。
######----------------------------------------------------------#####
但是,如果存储过程既返回DataReader又有返回值怎么接受,还有待研究。
######----------------------------------------------------------#####4.其他 对于以查询为主的存储过程(通常是 select语句为主,需要返回DataReader)用mycom的 ExecuteReader()函数,它返回一个DataReader;
对于以数值操作为主的存储过程,通常使用ExecuteNonQuery()函数,它可以返回存储过程的返 回值,默认是返回影响的行数。
mycom还有ExecuteScalar()和ExecuteXMLReader()函数。后者在除XML操作外不常用。前者的特 点是返回结果集的第一行第一列值。还需要实际应用中发现它的方便。
@CategoryName nchar(15),
@identity int OUT
AS
INSERT INTO Categories(CategoryName) Values(@CategoryName)
SET @identity = @@identity
Return @@RowCount下面的代码演示了如何使用存储过程,及输出参数和返回值,对你可能有点吃力
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=;database=Northwind");
SqlCommand cmd = new SqlCommand("InsertCategory", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ReturnValue", SqlDbType.Int);
cmd.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("@CategoryName", SqlDbType.NChar, 15).Value = TextBox1.Text;
cmd.Parameters.Add("@identity", SqlDbType.Int);
cmd.Parameters["@identity"].Direction = ParameterDirection.Output;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();Label1.Text = string.Empty;
Label1.Text += cmd.Parameters["@identity"].Value.ToString();
Label1.Text += " " + cmd.Parameters["@ReturnValue"].Value.ToString();