使用SqlCommand对象执行存储过程
2010-12-29 14:39
381 查看
前面我们介绍使用 SqlCommand 执行一个参数化的SQL语句,现在我们来学习如何使用SqlCommand执行存储过程。为了能更灵活地指定参数,我们在页面上添加两个文本框,tbClassName 和 tbBoardname,和一个用于添加版块的按钮 btn_AddBoard,双击添加按钮Click事件处理程序。
在这段代码中,要注意以下几点。
1. CommandType 枚举。用来枚举所有的命令类型,默认是 CommandType.Text,用于执行SQL语句。如果我们把SqlCommand 的 CommandText 设置为一个存储过程名,则应该指字 CommandType 为 CommandType.StoredProcedure。
2. Parameters 集合。我们需要把所有存储过程需要的参数都添加到 SqlCommand 的 SqlParameterCollection 集合中去,参数名、参数类型和参数大小都应该和存储过程中声明的参数对应。
3. 参数的类型和值。对于输入参数,我们可以通过Parameter的Value属性为其指定一个值。我们注意到,这个值可以是任意类型的。对于输出参数和返回参数,在存储过程执行以前它们的值都为空,在存储过程执行以后,我们可以通过再次访问 SqlParameterCollection 集合来获取参数的值。
我们看到,@ClassID输出参数的值被设置成了 @ClassName 参数对应的分类的分类ID;@BoardCount返回参数的值被设置成 tbBoard表中记录的总数。
protected void Button1_Click(object sender, EventArgs e) { string sConnectionString = @"Server=(local)\SQLEXPRESS;database=Forum;Trusted_Connection=True"; using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("CreateBoard", conn)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@ClassName", SqlDbType.VarChar, 50); cmd.Parameters["@ClassName"].Value = tbClassName.Text; cmd.Parameters["@ClassName"].Direction = ParameterDirection.Input; cmd.Parameters.Add("@BoardName", SqlDbType.VarChar, 50); cmd.Parameters["@BoardName"].Value = tbBoardName.Text; cmd.Parameters["@BoardName"].Direction = ParameterDirection.Input; cmd.Parameters.Add("@ClassID", SqlDbType.VarChar, 50); cmd.Parameters["@ClassID"].Direction = ParameterDirection.Output; cmd.Parameters.Add("@BoardCount", SqlDbType.Int); cmd.Parameters["@BoardCount"].Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); foreach (SqlParameter parameter in cmd.Parameters) { Response.Write(string.Format("参数名: {0}, 参数方向: {1}, 参数值: {2}<br />", parameter.ParameterName, parameter.Direction.ToString(), parameter.Value)); } } }
在这段代码中,要注意以下几点。
1. CommandType 枚举。用来枚举所有的命令类型,默认是 CommandType.Text,用于执行SQL语句。如果我们把SqlCommand 的 CommandText 设置为一个存储过程名,则应该指字 CommandType 为 CommandType.StoredProcedure。
2. Parameters 集合。我们需要把所有存储过程需要的参数都添加到 SqlCommand 的 SqlParameterCollection 集合中去,参数名、参数类型和参数大小都应该和存储过程中声明的参数对应。
3. 参数的类型和值。对于输入参数,我们可以通过Parameter的Value属性为其指定一个值。我们注意到,这个值可以是任意类型的。对于输出参数和返回参数,在存储过程执行以前它们的值都为空,在存储过程执行以后,我们可以通过再次访问 SqlParameterCollection 集合来获取参数的值。
我们看到,@ClassID输出参数的值被设置成了 @ClassName 参数对应的分类的分类ID;@BoardCount返回参数的值被设置成 tbBoard表中记录的总数。
相关文章推荐
- C#中的类SqlCommand对象使用方法ExecuteNonQuery()调用SQLServer存储过程时,存储过程执行成功,数据发生改变,但是返回-1
- 使用SqlCommand对象执行存储过程
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 基于C#中的类SqlCommand对象调用SQLServer存储过程时,存储过程执行成功,但是对象方法ExecuteNonQuery()返回-1
- ASP.NET基础教程-SqlCommand对象-存储过程的使用
- SqlCommand对象-存储过程的使用
- SqlCommand对象-存储过程的使用
- ASP.NET基础教程-SqlCommand对象-存储过程的使用
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
- oracle 使用 dbms_lock.sleep暂停存储过程执行
- 转贴自微软MSDN:建议执行动态SQL时,使用sp_executesql 存储过程而不要使用EXECUTE 语句
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 使用链接服务器执行远程数据库上的存储过程_SQL技巧
- JDBC执行Oracle传入参数为集合对象的存储过程
- [PL/SQL]测试存储过程执行超长SQL(使用CLOB变量)
- SQL使用链接服务器执行远程数据库上的存储过程
- VB下使用adodb.command 执行存储过程注意
- 在sql server 2005的存储过程中使用cursor来取出exec()执行的结果表