您好,欢迎访问三七文档
C#.net是怎么使用存储过程的,来几句简单明了的代码?1.构造与Sql服务器连接对象SqlConnectionMyCon=newSqlConnection()2.构造SqlCommand对象SqlCommandMyCmd=newSqlCommand()3.指定SqlCommand对象调用的存储过程MyCmd.CommandText=ProcedureNameProcedureName是Sql数据库中实际存在的存储过程名4.声明SqlCommand对象的命令类型为存储过程MyCmd.CommandType=CommandType.StoredProcedure5.构造参数对象SqlParameterMyParam=newSqlParameter(@ParamName,类型,宽度);@ParamName:是调用存储过程的参数,参数名必需和现有的存储过程一致类型:SqlDbType.Char字符型,C#中用SqlDbType存储了Sql数据类型宽度:类型字宽.如char(15)6.赋值给参数对象MyParam.Value=Value7.将参数添加到SqlCommand对象MyCmd.Parameters.Add(MyParam)8.打开Sql连接对象MyCon.Open()9.执行SqlCommandMyCmd.ExecuteNonQuery()10.关闭Sql连接对象MyCon.Close()有多种方法使用ADO.NET调用存储过程并获得返回值和返回参数,其中包括:使用DataSet对象,在获得返回值和返回参数之外,还可以收集并使用返回的数据行。使用DataReader对象收集返回的行,遍历这些行,然后收集返回值和返回参数。使用ExecuteScalar方法返回结果中第一行的第一列的值以及返回值和返回参数。这对于聚合函数特别有用。使用ExecuteNonQuery方法只返回参数和值。任何返回的行都将被丢弃。这对于执行操作查询特别有用。使用DataReader返回行和参数您可以使用DataReader对象返回只读的仅向前型数据流。DataReader中所包含的信息可以来自一个存储过程。本示例使用DataReader对象运行带有输入和输出参数的存储过程,然后遍历返回记录,以查看返回参数。1.在运行MicrosoftSQLServer的服务器上创建下面的存储过程:2.CreateProcedureTestProcedure3.(4.@au_idINvarchar(11),5.@numTitlesOUTIntegerOUTPUT6.)7.AS8.9.selectA.au_fname,A.au_lname,T.title10.fromauthorsasAjointitleauthorasTAon11.A.au_id=TA.au_id12.jointitlesasT13.onT.title_id=TA.title_id14.whereA.au_id=@au_idIN15.set@numTitlesOUT=@@Rowcount16.return(5)17.用以下代码替换privateForm_Load事件中的代码:SQL客户端18.SqlConnectionPubsConn=newSqlConnection19.(DataSource=server;integrated+20.Security=sspi;initialcatalog=pubs;);21.SqlCommandtestCMD=newSqlCommand22.(TestProcedure,PubsConn);23.24.testCMD.CommandType=CommandType.StoredProcedure;25.26.SqlParameterRetVal=testCMD.Parameters.Add27.(RetVal,SqlDbType.Int);28.RetVal.Direction=ParameterDirection.ReturnValue;29.SqlParameterIdIn=testCMD.Parameters.Add30.(@au_idIN,SqlDbType.VarChar,11);31.IdIn.Direction=ParameterDirection.Input;32.SqlParameterNumTitles=testCMD.Parameters.Add33.(@numtitlesout,SqlDbType.VarChar,11);34.NumTitles.Direction=ParameterDirection.Output;35.36.IdIn.Value=213-46-8915;37.PubsConn.Open();38.39.SqlDataReadermyReader=testCMD.ExecuteReader();40.Console.WriteLine(BookTitlesforthisAuthor:);41.while(myReader.Read())42.{43.Console.WriteLine({0},myReader.GetString(2));44.};45.myReader.Close();46.Console.WriteLine(NumberofRows:+NumTitles.Value);47.Console.WriteLine(ReturnValue:+RetVal.Value);48.修改Connection对象的连接字符串,以便指向运行SQLServer的计算机。49.运行上述代码。注意,DataReader检索记录并返回参数值。可以使用DataReader对象的Read方法遍历返回的记录。“输出”窗口显示两本书的标题、返回值5和输出参数,其中包含记录的数目(2)。注意,必须关闭代码中的DataReader才能看到参数值。另外还要注意,如果关闭了DataReader,则不必为了查看返回参数而遍历所有记录使用Command对象的ExecuteScalar方法可以使用Command对象的ExecuteScalar方法检索参数值。另外,ExecuteScalar返回该存储过程的第一行的第一列。这对于聚合函数特别有用,如下例所示。1.在运行SQLServer的服务器上创建下面的存储过程:2.CreateProcedureTestProcedure23.(4.@au_idINvarchar(11)5.)6.As7./*setnocounton*/8.selectcount(T.title)9.fromauthorsasAjointitleauthorasTAon10.A.au_id=TA.au_id11.jointitlesasT12.onT.title_id=TA.title_id13.whereA.au_id=@au_idIN14.Return(5)15.新建一个新的VisualC#.NETWindows应用程序项目。16.对System和System.Data命名空间使用using语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL客户端17.usingSystem.Data.SqlClient;18.将下面的代码添加到Form_Load事件:SQL客户端19.stringstrCount;20.SqlConnectionPubsConn=newSqlConnection21.(DataSource=server;integrated+22.Security=sspi;initialcatalog=pubs;);23.SqlCommandtestCMD=newSqlCommand24.(TestProcedure2,PubsConn);25.26.testCMD.CommandType=CommandType.StoredProcedure;27.28.SqlParameterRetVal=testCMD.Parameters.Add29.(RetVal,SqlDbType.Int);30.RetVal.Direction=ParameterDirection.ReturnValue;31.SqlParameterIdIn=testCMD.Parameters.Add32.(@au_idIN,SqlDbType.VarChar,11);33.IdIn.Direction=ParameterDirection.Input;34.35.IdIn.Value=213-46-8915;36.37.PubsConn.Open();38.39.strCount=testCMD.ExecuteScalar().ToString();40.41.Console.WriteLine(NumberofRows:+strCount);42.Console.WriteLine(ReturnValue:+RetVal.Value);43.修改Connection对象的连接字符串,以便指向运行SQLServer的计算机。44.运行上述代码。注意,Command对象的ExecuteScalar方法将返回参数。ExecuteScalar还将返回所返回的行集中的第一行第一列的值。因此,intCount的值是存储过程的count函数的结果。使用Command对象的ExecuteNonQuery方法此示例使用ExecuteNonQuery方法运行查询并返回参数值。ExecuteNonQuery还返回在运行此查询后受影响的记录数。但是,ExecuteNonQuery不从该存储过程返回任何行或列。如果只需要知道更改的行数,那么在使用INSERT、UPDATE或DELETE语句时,ExecuteNonQuery方法特别有用。当存储过程中仅使用SELECT语句时,您将收到-1,因为查询不会影响任何行。1.在运行SQLServer的计算机上创建下面的存储过程:2.CreateProcedureTestProcedure33.(4.@au_idINvarchar(11),5.@au_fnamvarchar(30)6.)7.8.As9./*setnocounton*/10.Updateauthorssetau_fname=@au_fnam11.whereau_id=@au_idin12.return(5)13.新建一个新的VisualC#.NETWindows应用程序项目。14.对System和System.Data命名空间使用using语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL客户端15.usingSystem.Data.SqlClient;16.用以下代码替换Form1代码模块中privateForm1_Load事件后面的代码:SQL客户端17.stringstrRowAffect;18.SqlConnectionPubsConn=newSqlConnection19.(DataSource=server;integratedSecurity=sspi;+20.initialcatalog=pubs;);21.SqlCommandtestCMD=newSqlCommand22.(TestProcedure3,PubsConn);23.24.testCMD.CommandType=CommandType.StoredProcedure;25.26.SqlParameterRetVal=testCMD.Parameters.Add27.(RetVal,SqlDbType.Int);28.RetVal.Direction=ParameterDirection.ReturnValue;29.SqlParameterIdIn=testCMD.Paramet
本文标题:c#
链接地址:https://www.777doc.com/doc-4674098 .html