当前位置:文档之家› C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子/itblog/article/details/752869创建存储过程Create Proc dbo.存储过程名存储过程参数AS执行语句RETURN执行存储过程GODECLARE @iRet INT, @PKDisp VARCHAR(20)SET @iRet = '1'Select @iRet =CASEWHEN @PKDisp = '一' THEN 1WHEN @PKDisp = '二' THEN 2WHEN @PKDisp = '三' THEN 3WHEN @PKDisp = '四' THEN 4WHEN @PKDisp = '五' THEN 5ELSE 100ENDDECLARE @i INTSET @i = 1WHILE @i<10 BEGINset @i=@i+1PRINT @iENDDECLARE @d INTset @d = 1IF @d = 1 BEGIN-- 打印PRINT '正确'ENDELSE BEGINPRINT '错误'ENDCREATE PROC P_TEST@Name VARCHAR(20),@Rowcount INT OUTPUTASBEGINSELECT * FROM T_Customer WHERE NAME=@NameSET @Rowcount=@@ROWCOUNTENDGO------------------------------------------------------------------------------------------存储过程调用如下:----------------------------------------------------------------------------------------DECLARE @i INTEXEC P_TEST 'A',@i OUTPUTSELECT @i--结果/*Name Address Tel---------- ---------- --------------------A Address Telphone(所影响的行数为 1 行)-----------1(所影响的行数为 1 行)*/------------------------------------------------------------------------------------------DotNet 部分(C#)--WebConfig 文件:----------------------------------------------------------------------------------------......</system.web><!-- 数据库连接字符串--><appSettings><add key="ConnectString" value="server=(local);User ID=sa;Password=;database=Test" /> </appSettings></configuration>------------------------------------------------------------------------------------------C#代码:(用到两个测试控件,DataGrid1(用于显示绑定结果集合),Lable(用于显示存储过程返回单值)----------------------------------------------------------------------------------------//添加数据库引用using System.Data.SqlClient;......private void Page_Load(object sender, System.EventArgs e){// 在此处放置用户代码以初始化页面String DBConnStr;DataSet MyDataSet=new DataSet();System.Data.SqlClient.SqlDataAdapter DataAdapter=new System.Data.SqlClient.SqlDataAdapter(); DBConnStr=System.Configuration.ConfigurationSettings.AppSettings["ConnectString"];System.Data.SqlClient.SqlConnection myConnection = newSystem.Data.SqlClient.SqlConnection(DBConnStr);if (myConnection.State!=ConnectionState.Open){myConnection.Open();}System.Data.SqlClient.SqlCommand myCommand = newSystem.Data.SqlClient.SqlCommand("P_Test",myConnection);mandType=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();}}----------------------------------------------------------------------------------------运行以上代码即可(返回记录集合和存储过程返回值)一、简介:存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行它,在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。

系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server。

用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。

存储过程具有以下优点:?1.存储过程允许标准组件式编程(模块化设计)存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。

因为应用程序源代码只包含存储过程的调用语句,从而极大地提高了程序的可移植性。

2.存储过程能够实现快速的执行速度如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理的执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。

3.存储过程能够减少网络流量对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL 语句从而大大增加了网络流量降低网络负载。

4.存储过程可被作为一种安全机制来充分利用系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制。

二、变量@I三、流程控制语句(if else | select case | while )Select ... CASE 实例DECLARE @iRet INT, @PKDisp VARCHAR(20)SET @iRet = '1'Select @iRet =CASEWHEN @PKDisp = '一' THEN 1WHEN @PKDisp = '二' THEN 2WHEN @PKDisp = '三' THEN 3WHEN @PKDisp = '四' THEN 4WHEN @PKDisp = '五' THEN 5ELSE 100END四、存储过程格式创建存储过程Create Proc dbo.存储过程名存储过程参数AS执行语句RETURN执行存储过程GO理论知识:结束语法示例:开始-- 变量的声明,sql里面声明变量时必须在变量前加@符号DECLARE @I INT-- 变量的赋值,变量赋值时变量前必须加setSET @I = 30-- 声明多个变量DECLARE @s varchar(10),@a INT-- Sql 里if语句IF 条件BEGIN执行语句ENDELSE BEGIN执行语句ENDDECLARE @d INTset @d = 1IF @d = 1 BEGIN-- 打印PRINT '正确'ENDELSE BEGINPRINT '错误'END-- Sql 里的多条件选择语句.DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = 1Select @iRet =CASEWHEN @PKDisp = '一' THEN 1WHEN @PKDisp = '二' THEN 2WHEN @PKDisp = '三' THEN 3WHEN @PKDisp = '四' THEN 4WHEN @PKDisp = '五' THEN 5ELSE 100END-- 循环语句WHILE 条件BEGIN执行语句ENDDECLARE @i INTSET @i = 1WHILE @i<1000000 BEGINset @i=@i+1END-- 打印PRINT @i语法示例:结束相关说明:开始?-- TRUNCATE 删除表中的所有行,而不记录单个行删除操作,不能带条件TRUNCATE TABLE 在功能上与不带Where 子句的Delete 语句相同:二者均删除表中的全部行。

相关主题