使用ADO,NET来调用存储过程可以分为一下4种方式
1)调用不带参数的存储过程
2)调用带一个参数的存储过程
3)调用带多个参数的存储过程
4)调用带输出参数的存储过程
(本代码示例所使用的存储过程,使用的是作者的上一篇博文所创建的存储过程,博文地址:http://www.cnblogs.com/qq731109249/archive/2012/10/07/2714236.html,请大家参考)
一,ADO.NET调用不带参数的存储过程,使用的存储过程是上篇博文示例1-1创建的存储过程
具体的调用代码1-1演示如下:
1 public void ShowData1() 2 { 3 SqlConnection con = new SqlConnection(strConString); 4 //实例化SqlCommand对象,参数对象指定为所要访问存储过程的名称 5 SqlCommand cmd = new SqlCommand("select_activity", con); 6 //指定命令类型为存储过程 7 cmd.CommandType = CommandType.StoredProcedure; 8 //创建数据集 9 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 10 DataTable table = new DataTable(); 11 adapter.Fill(table); 12 13 DataRow Dr = table.Rows[0]; 14 Response.Write(Dr[3].ToString()); 15 16 }
二,因为上篇博文没有创建只有一个参数的存储过程,创建过程如下:
1 --创建带一个参数的存储过程 2 create proc select_activity3 3 @id int 4 as 5 --该存储过程所执行的sql命令 6 select * from T_Activity where id=@id; 7 8 --调用select_activity存储过程 9 exec select_activity3 5
ADO.NET调用带一个参数的存储过程的示例1-2代码如下:
1 /// <summary> 2 /// 调用带一个参数的存数过程 3 /// </summary> 4 public void ShowData2() 5 { 6 SqlConnection con = new SqlConnection(strConString); 7 SqlCommand cmd = new SqlCommand("select_activity3", con); 8 //指定命令类型为存储过程 9 cmd.CommandType = CommandType.StoredProcedure; 10 11 //声明参数对象 12 SqlParameter parameter = new SqlParameter(); 13 //指定参数名 14 parameter.ParameterName = "@id"; 15 //指定参数的数据类型 16 parameter.SqlDbType = SqlDbType.Int; 17 //给参数赋值 18 parameter.Value = 5; 19 //将命令对象加入命令对象的参数集合中 20 cmd.Parameters.Add(parameter); 21 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 22 //创建DataTable对象 23 DataTable table = new DataTable(); 24 adapter.Fill(table); 25 26 DataRow Dr = table.Rows[0]; 27 Response.Write(Dr[3].ToString()); 28 29 }
三,ADO.NET调用带多个参数的存储过程,本示例1-3代码以两个参数的作为演示,更多的参数,可以参照该示例,使用的存储过程为上篇博文的示例1-2
1 /// <summary> 2 /// 调用带两个参数的参数数组 3 /// </summary> 4 public void ShowData3() 5 { 6 SqlConnection con = new SqlConnection(strConString); 7 SqlCommand cmd = new SqlCommand("select_activity1", con); 8 //指定命令类型为存储过程 9 cmd.CommandType = CommandType.StoredProcedure; 10 11 //声明一个多维的参数数组 12 SqlParameter[] parameter = 13 { 14 new SqlParameter("@id",SqlDbType.Int,4), 15 new SqlParameter("@activityName",SqlDbType.NVarChar,50) 16 }; 17 parameter[0].Value = 5; 18 //给参数赋值 19 parameter[1].Value = "比武招亲"; 20 //将命令对象加入命令对象的参数集合中 21 cmd.Parameters.AddRange(parameter); 22 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 23 //创建DataTable对象 24 DataTable table = new DataTable(); 25 adapter.Fill(table); 26 27 DataRow Dr = table.Rows[0]; 28 Response.Write(Dr[3].ToString()); 29 }
四,ADO.NET访问带输出参数的存储过程,本示例1-4代码以输入一个且输出一个参数的作为演示,更多的参数,可以参照该示例,使用的存储过程为上篇博文的示例1-4
1 /// <summary> 2 /// 调用带返回值的存储过程 3 /// </summary> 4 public void ShowData4() 5 { 6 SqlConnection con = new SqlConnection(strConString); 7 SqlCommand cmd = new SqlCommand("select_MathResult", con); 8 cmd.CommandType = CommandType.StoredProcedure; 9 SqlParameter[] parameter = { 10 new SqlParameter("@activityName",SqlDbType.NVarChar,50), 11 new SqlParameter("@result",SqlDbType.Int,4) 12 }; 13 14 parameter[0].Value = "比武招亲"; 15 //设定输出参数的输出方法向 16 parameter[1].Direction = ParameterDirection.Output; 17 cmd.Parameters.AddRange(parameter); 18 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 19 DataTable table = new DataTable(); 20 adapter.Fill(table); 21 Response.Write(Convert.ToInt32(cmd.Parameters[1].Value)); 22 }
这样就完成了ADO.NET对Sql Server存储过程的访问的所有示例。因为在整理的时候发现内容太多,无法在一篇博文完成,只能分为若干篇。请大家继续关注我的博客,下次将为大家更新,Sql Server的表连接查询,多表查询,分页,等知识。