C#调用存储过程简单完整例子创建存储过程CreateProcdbo.存储过程名存储过程参数AS执行语句RETURN执行存储过程GODECLARE@iRetINT,@PKDispVARCHAR(20)SET@iRet='1'Select@iRet=CASEWHEN@PKDisp='一'THEN1WHEN@PKDisp='二'THEN2WHEN@PKDisp='三'THEN3WHEN@PKDisp='四'THEN4WHEN@PKDisp='五'THEN5ELSE100ENDDECLARE@iINTSET@i=1WHILE@i10BEGINset@i=@i+1PRINT@iENDDECLARE@dINTset@d=1IF@d=1BEGIN--打印PRINT'正确'ENDELSEBEGINPRINT'错误'ENDCREATEPROCP_TEST@NameVARCHAR(20),@RowcountINTOUTPUTASBEGINSELECT*FROMT_CustomerWHERENAME=@NameSET@Rowcount=@@ROWCOUNTENDGO------------------------------------------------------------------------------------------存储过程调用如下:----------------------------------------------------------------------------------------DECLARE@iINTEXECP_TEST'A',@iOUTPUTSELECT@i--结果/*NameAddressTel----------------------------------------AAddressTelphone(所影响的行数为1行)-----------1(所影响的行数为1行)*/------------------------------------------------------------------------------------------DotNet部分(C#)--WebConfig文件:----------------------------------------------------------------------------------------....../system.web!--数据库连接字符串--appSettingsaddkey=ConnectStringvalue=server=(local);UserID=sa;Password=;database=Test//appSettings/configuration------------------------------------------------------------------------------------------C#代码:(用到两个测试控件,DataGrid1(用于显示绑定结果集合),Lable(用于显示存储过程返回单值)----------------------------------------------------------------------------------------//添加数据库引用usingSystem.Data.SqlClient;......privatevoidPage_Load(objectsender,System.EventArgse){//在此处放置用户代码以初始化页面StringDBConnStr;DataSetMyDataSet=newDataSet();System.Data.SqlClient.SqlDataAdapterDataAdapter=newSystem.Data.SqlClient.SqlDataAdapter();DBConnStr=System.Configuration.ConfigurationSettings.AppSettings[ConnectString];System.Data.SqlClient.SqlConnectionmyConnection=newSystem.Data.SqlClient.SqlConnection(DBConnStr);if(myConnection.State!=ConnectionState.Open){myConnection.Open();}System.Data.SqlClient.SqlCommandmyCommand=newSystem.Data.SqlClient.SqlCommand(P_Test,myConnection);myCommand.CommandType=CommandType.StoredProcedure;//添加输入查询参数、赋予值myCommand.Parameters.Add(@Name,SqlDbType.VarChar);myCommand.Parameters[@Name].Value=A;//添加输出参数myCommand.Parameters.Add(@Rowcount,SqlDbType.Int);myCommand.Parameters[@Rowcount].Direction=ParameterDirection.Output;myCommand.ExecuteNonQuery();DataAdapter.SelectCommand=myCommand;if(MyDataSet!=null){DataAdapter.Fill(MyDataSet,table);}DataGrid1.DataSource=MyDataSet;DataGrid1.DataBind();//得到存储过程输出参数Label1.Text=myCommand.Parameters[@Rowcount].Value.ToString();if(myConnection.State==ConnectionState.Open){myConnection.Close();}}----------------------------------------------------------------------------------------运行以上代码即可(返回记录集合和存储过程返回值)一、简介:存储过程(StoredProcedure),是一组为了完成特定功能的SQL语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行它,在SQLServer的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。系统SP,主要存储master数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQLServer。用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。存储过程具有以下优点:?1.存储过程允许标准组件式编程(模块化设计)存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代码只包含存储过程的调用语句,从而极大地提高了程序的可移植性。2.存储过程能够实现快速的执行速度如果某一操作包含大量的Transaction-SQL代码,,或分别被多次执行,那么存储过程要比批处理的执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。3.存储过程能够减少网络流量对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL语句从而大大增加了网络流量降低网络负载。4.存储过程可被作为一种安全机制来充分利用系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制。二、变量@I三、流程控制语句(ifelse|selectcase|while)Select...CASE实例DECLARE@iRetINT,@PKDispVARCHAR(20)SET@iRet='1'Select@iRet=CASEWHEN@PKDisp='一'THEN1WHEN@PKDisp='二'THEN2WHEN@PKDisp='三'THEN3WHEN@PKDisp='四'THEN4WHEN@PKDisp='五'THEN5ELSE100END四、存储过程格式创建存储过程CreateProcdbo.存储过程名存储过程参数AS执行语句RETURN执行存储过程GO理论知识:结束语法示例:开始--变量的声明,sql里面声明变量时必须在变量前加@符号DECLARE@IINT--变量的赋值,变量赋值时变量前必须加setSET@I=30--声明多个变量DECLARE@svarchar(10),@aINT--Sql里if语句IF条件BEGIN执行语句ENDELSEBEGIN执行语句ENDDECLARE@dINTset@d=1IF@d=1BEGIN--打印PRINT'正确'ENDELSEBEGINPRINT'错误'END--Sql里的多条件选择语句.DECLARE@iRetINT,@PKDispVARCHAR(20)SET@iRet=1Select@iRet=CASEWHEN@PKDisp='一'THEN1WHEN@PKDisp='二'THEN2WHEN@PKDisp='三'THEN3WHEN@PKDisp='四'THEN4WHEN@PKDisp='五'THEN5ELSE100END--循环语句WHILE条件BEGIN执行语句ENDDECLARE@iINTSET@i=1WHILE@i1000000BEGINset@i=@i+1END--打印PRINT@i语法示例:结束相关说明:开始?--TRUNCATE删除表中的所有行,而不记录单个行删除操作,不能带条件TRUNCATETABLE在功能上与不带Where子句的Delete语句相同:二者均删除表中的全部行。但TRUNCATETABLE比Delete速度快,且使用的系统和事务日志资源少。Delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATETABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。TRUNCATETABLE删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用Delete。如果要删除表定义及其数据,请使用DropTABLE语句。对于由FOREIGNKEY约束引用的表,不能使用TRUNCATETABLE,而应使用不带Where子句的Delete语句。由于TRUNCATETABLE不记录在日志中,所以它不能激活触发器。TRUNCATETABLE不能用于参与了索引视图的表。示例下例删除authors表中的所有数据。TRUNCATETABLEauthors--SelectINTO从一个查询的计算结果中创建一个新表。数据并不返回给客户端,这一点和普通的--Select不同。新表的字段具有和Select的输出字段相关联(相同)的名字和数据类型。select*intoNewTablefromUname--InsertINTOSelect--表ABC必须存在--把表Uname里面的字段Username复制