.net调用存储过程详解

本文的数据库用的是sql server自带数据Northwind

 连接字符串

View Code
1 string conn = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;

confige文件

View Code
1  <connectionStrings>
2         <add name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/>
3     </connectionStrings>

1. 只返回单一记录集的存储过程

View Code
 1 SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         // 设置sql连接
 4         cmd.Connection = sqlconn;
 5         // 如果执行语句
 6         cmd.CommandText = "Categoriestest1";
 7         // 指定执行语句为存储过程
 8         cmd.CommandType = CommandType.StoredProcedure;
 9 
10         SqlDataAdapter dp = new SqlDataAdapter(cmd);
11         DataSet ds = new DataSet();
12         // 填充dataset
13         dp.Fill(ds);
14         // 以下是显示效果
15         GridView1.DataSource = ds;
16         GridView1.DataBind();

存储过程Categoriestest1

View Code
1 CREATE PROCEDURE Categoriestest1 
2 AS
3 select * 
4 from  Categories
5 GO

2. 没有输入输出的存储过程

c#代码部分

View Code
 1  SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3 
 4         cmd.Connection = sqlconn;
 5         cmd.CommandText = "Categoriestest2";
 6         cmd.CommandType = CommandType.StoredProcedure;
 7         sqlconn.Open();
 8         // 执行并显示影响行数
 9         Label1.Text = cmd.ExecuteNonQuery().ToString();
10         sqlconn.Close();

存储过程Categoriestest2

View Code
1 CREATE PROCEDURE Categoriestest2  AS
2 insert into dbo.Categories 
3 (CategoryName,[Description],[Picture])
4 values ('test1','test1',null)
5 GO

3. 有返回值的存储过程

c#代码部分

View Code
 1 SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         cmd.Connection = sqlconn;
 4         cmd.CommandText = "Categoriestest3";
 5         cmd.CommandType = CommandType.StoredProcedure;
 6         // 创建参数
 7         IDataParameter[] parameters = {
 8                 new SqlParameter("rval", SqlDbType.Int,4)
 9             };
10         // 将参数类型设置为 返回值类型
11         parameters[0].Direction = ParameterDirection.ReturnValue;
12         // 添加参数
13         cmd.Parameters.Add(parameters[0]);
14 
15         sqlconn.Open();
16         // 执行存储过程并返回影响的行数
17         Label1.Text = cmd.ExecuteNonQuery().ToString();
18         sqlconn.Close();
19         // 显示影响的行数和返回值
20         Label1.Text += "-" + parameters[0].Value.ToString() ;
View Code
1 CREATE PROCEDURE Categoriestest3
2 AS
3 insert into dbo.Categories 
4 (CategoryName,[Description],[Picture])
5 values ('test1','test1',null)
6 return @@rowcount
7 GO

4. 有输入参数和输出参数的存储过程

c#代码部分

View Code
 1 SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         cmd.Connection = sqlconn;
 4         cmd.CommandText = "Categoriestest4";
 5         cmd.CommandType = CommandType.StoredProcedure;
 6         // 创建参数
 7         IDataParameter[] parameters = {
 8                 new SqlParameter("@Id", SqlDbType.Int,4) ,
 9                 new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
10             };
11         // 设置参数类型
12         parameters[0].Direction = ParameterDirection.Output;  // 设置为输出参数
13         parameters[1].Value = "testCategoryName";
14         // 添加参数
15         cmd.Parameters.Add(parameters[0]);
16         cmd.Parameters.Add(parameters[1]);
17 
18         sqlconn.Open();
19         // 执行存储过程并返回影响的行数
20         Label1.Text = cmd.ExecuteNonQuery().ToString();
21         sqlconn.Close();
22         // 显示影响的行数和输出参数
23         Label1.Text += "-" + parameters[0].Value.ToString() ;

存储过程Categoriestest4      

View Code
1 CREATE PROCEDURE Categoriestest4
2 @id int output,
3 @CategoryName nvarchar(15)
4 AS
5 insert into dbo.Categories 
6 (CategoryName,[Description],[Picture])
7 values (@CategoryName,'test1',null)
8 set  @id = @@IDENTITY
9 GO

5. 同时具有返回值、输入参数、输出参数的存储过程

c#代码部分

View Code
 1 SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         cmd.Connection = sqlconn;
 4         cmd.CommandText = "Categoriestest5";
 5         cmd.CommandType = CommandType.StoredProcedure;
 6         // 创建参数
 7         IDataParameter[] parameters = {
 8                 new SqlParameter("@Id", SqlDbType.Int,4) ,
 9                 new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
10                 new SqlParameter("rval", SqlDbType.Int,4)
11             };
12         // 设置参数类型
13         parameters[0].Direction = ParameterDirection.Output;       // 设置为输出参数
14         parameters[1].Value = "testCategoryName";                  // 给输入参数赋值
15         parameters[2].Direction = ParameterDirection.ReturnValue;  // 设置为返回值
16         // 添加参数
17         cmd.Parameters.Add(parameters[0]);
18         cmd.Parameters.Add(parameters[1]);
19         cmd.Parameters.Add(parameters[2]);
20 
21         sqlconn.Open();
22         // 执行存储过程并返回影响的行数
23         Label1.Text = cmd.ExecuteNonQuery().ToString();
24         sqlconn.Close();
25         // 显示影响的行数,输出参数和返回值
26         Label1.Text += "-" + parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();

存储过程Categoriestest5

View Code
 1 CREATE PROCEDURE Categoriestest5
 2 @id int output,
 3 @CategoryName nvarchar(15)
 4 AS
 5 insert into dbo.Categories 
 6 (CategoryName,[Description],[Picture])
 7 values (@CategoryName,'test1',null)
 8 set  @id = @@IDENTITY
 9 return @@rowcount
10 GO

6. 同时返回参数和记录集的存储过程

c#代码部分

View Code
 1  SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         cmd.Connection = sqlconn;
 4         cmd.CommandText = "Categoriestest6";
 5         cmd.CommandType = CommandType.StoredProcedure;
 6         // 创建参数
 7         IDataParameter[] parameters = {
 8                 new SqlParameter("@Id", SqlDbType.Int,4) ,
 9                 new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
10                 new SqlParameter("rval", SqlDbType.Int,4)                   // 返回值
11             };
12         // 设置参数类型
13         parameters[0].Direction = ParameterDirection.Output;        // 设置为输出参数
14         parameters[1].Value = "testCategoryName";                   // 给输入参数赋值
15         parameters[2].Direction = ParameterDirection.ReturnValue;   // 设置为返回值
16         // 添加参数
17         cmd.Parameters.Add(parameters[0]);
18         cmd.Parameters.Add(parameters[1]);
19         cmd.Parameters.Add(parameters[2]);
20 
21         SqlDataAdapter dp = new SqlDataAdapter(cmd);
22         DataSet ds = new DataSet();
23         // 填充dataset
24         dp.Fill(ds);
25         // 显示结果集
26         GridView1.DataSource = ds.Tables[0];
27         GridView1.DataBind();
28 
29         Label1.Text = "";
30         // 显示输出参数和返回值
31         Label1.Text +=  parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();

存储过程Categoriestest6

View Code
 1 CREATE PROCEDURE Categoriestest6
 2 @id int output,
 3 @CategoryName nvarchar(15)
 4 AS
 5 insert into dbo.Categories 
 6 (CategoryName,[Description],[Picture])
 7 values (@CategoryName,'test1',null)
 8 set  @id = @@IDENTITY
 9 select * from Categories
10 return @@rowcount
11 GO

7. 返回多个记录集的存储过程

 c#代码部分

View Code
 1  SqlConnection sqlconn = new SqlConnection(conn);
 2         SqlCommand cmd = new SqlCommand();
 3         
 4         cmd.Connection = sqlconn;
 5         cmd.CommandText = "Categoriestest7";
 6         cmd.CommandType = CommandType.StoredProcedure;
 7 
 8         SqlDataAdapter dp = new SqlDataAdapter(cmd);
 9         DataSet ds = new DataSet();
10         // 填充dataset
11         dp.Fill(ds);
12         // 显示结果集1
13         GridView1.DataSource = ds.Tables[0];
14         GridView1.DataBind();
15         // 显示结果集2
16         GridView2.DataSource = ds.Tables[1];
17         GridView2.DataBind();

存储过程Categoriestest7

View Code
1 CREATE PROCEDURE Categoriestest7
2 AS
3 select * from Categories
4 select * from Categories
5 GO
原文地址:https://www.cnblogs.com/zcttxs/p/2447127.html