精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
介绍了执行SQL Server存储过程以及如何检索返回参数。
存储过程是编译和存储在数据库内的SQL命令集合。每次执行一个SQL命令时,命令解析,优化完成,然后再执行命令。每次运行的命令的解析和优化查询是非常昂贵的。为了解决这个问题,我们有一组命令,统称为存储过程,它们已经解析和优化过,已经为随后执行做好了准备。本文介绍如何通过Ado.net调用存储过程和怎样处理存储过程调用中的输出参数。
最初创建一个SqlConnection类的对象,通过导入System.Data.SqlClient命名空间可以使用这个类。您必须提供连接字符串作为参数,其中包括数据源名称,数据库名称和身份验证凭据。使用Open()方法打开连接。
SqlConnection con = new SqlConnection("Data Source= ; initial catalog= Northwind ; User Id= ; Password= '"); con.open();
在Northwind数据库里,对Region表创建如下存储过程,它有两个参数,且没有任何输出参数。
CREATE PROCEDURE RegionUpdate (@RegionID INTEGER, @RegionDescription NCHAR(50)) AS SET NOCOUNT OFF UPDATE Region SET RegionDescription = @RegionDescription
在提供了和要运行的存储过程命名对应的参数,提供了接收命令的连接情况下,可以创建一个SqlCommand对象。
SqlCommand command = new SqlCommand("RegionUpdate",con);
更改存储过程命令对象的CommandType属性。
command.CommandType = CommandType.StoredProcedure;
使用Parameters集合和SqlParameter类,把参数加入到命令对象里。
command.Parameters.Add(new SqlParameter("@RegionID",SqlDbType.Int,0,"RegionID")); command.Parameters.Add(new SqlParameter("@RegionDescription",SqlDbType.NChar,50,"RegionDescription"));
用Value属性指定参数的值
command.Parameters[0].Value=4; command.Parameters[1].Value="SouthEast";
使用ExecuteNonQuery方法执行存储过程,这个方法返回存储过程影响的行数。
int i=command.ExecuteNonQuery();
现在让我们来看看如何执行带输出参数的存储过程,以及如何访问输出参数的结果。
创建如下有一个输出参数的存储过程。
ALTER PROCEDURE RegionFind(@RegionDescription NCHAR(50) OUTPUT, @RegionID INTEGER )AS SELECT @RegionDescription =RegionDescription from Region where "mailto:RegionID=@RegionID">RegionID=@RegionID
上面的存储过程接受输入参数regionID和用输入的RegionID 来查RegionDescription,且把结果输出到RegionDescription参数里。
SqlCommand command1 = new SqlCommand("RegionFind",con); command1.CommandType = CommandType.StoredProcedure;
Add the paremeters to the command1把参数添加到命令上
command1.Parameters.Add(new SqlParameter ("@RegionDescription",SqlDbType.NChar ,50,ParameterDirection.Output,false,0,50,"RegionDescription",DataRowVersion.Default,null)); command1.Parameters.Add(new SqlParameter("@RegionID" , SqlDbType.Int, 0 , "RegionID" ));
注意到RegionDescription参数的ParameterDirection选项是Ouput。
指定输入参数RegionID的值。
command1.Parameters["@RegionID"].Value = 4;
用UpdateRowSource.OutputParameters赋值给SqlCommand对象的UpdatedRowSource属性,这表示从这个存储过程返回的数据将通过输出参数实现。
command1.UpdatedRowSource = UpdateRowSource.OutputParameters;
调用存储过程,用value属性来访问RegionID为4对应RegionDescription的值。
command1.ExecuteNonQuery(); string newRegionDescription =(string) command1.Parameters["@RegionDescription"].Value;
Close the sql connection.关闭SQL连接。
con.Close();
以同样的方式,通过确定适当的参数,你可以调用返回一组记录行的存储过程,使用ExecuteReader()来执行命令,命令的返回结果是可遍历记录集。