C#调用存储过程简单完整例子(zz)

CREATE PROC P_TEST
@Name VARCHAR(20),
@Rowcount INT OUTPUT
AS
BEGIN
 SELECT * FROM T_Customer WHERE NAME=@Name
 SET  @Rowcount=@@ROWCOUNT
END
GO
----------------------------------------------------------------------------------------
--存储过程调用如下:
----------------------------------------------------------------------------------------
DECLARE @i INT
EXEC P_TEST 'A',@i OUTPUT
SELECT @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 = new System.Data.SqlClient.SqlConnection(DBConnStr);
   if (myConnection.State!=ConnectionState.Open)
   {
    myConnection.Open();
   }  
   System.Data.SqlClient.SqlCommand myCommand = new System.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();
   }

  }
----------------------------------------------------------------------------------------
运行以上代码即可(返回记录集合和存储过程返回值)

//补充:红色语句表明了要调用数据库服务器端存储过程,而不是调用web服务器端的sql语句。

CommandType Enumeration

Member nameDescription
Supported by the XNA Framework Text An SQL text command. (Default.)
Supported by the XNA Framework StoredProcedure The name of a stored procedure.
Supported by the XNA Framework TableDirect The name of a table.

When the CommandType property is set to StoredProcedure, the CommandText property should be set to the name of the stored procedure to be accessed. The user may be required to use escape character syntax or include qualifying characters if any of the specified tables named contain any special characters. All rows and columns of the named table or tables will be returned when you call one of the Execute methods of a Command object.(当CommandType属性被设置成StoredProcedure,CommandText属性应该被设置成被访问的存储过程的名字)

原文地址:https://www.cnblogs.com/zhangjun1130/p/1993526.html