C# 调用存储过程操作 OUTPUT参数和Return返回值

简介: 本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html   存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。

本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html  

存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编译,编译好的版本保存在高速缓存中。在执行重复任务时,存储过程可以提高性能和一致性。由于存储过程可以将一系列对数据库的操作放在数据库服务器上执行,因而可以降低Web服务器的负载,提高整个系统的性能。

 

1、创建存储过程

CREATE PROC [DBO].[GetOrdersByOrderDate]
    @OrderDate DATETIME
AS
    SELECT
        [OrderID],[CustomerID],[OrderDate]
    FROM
        [Orders]
    WHERE
        [OrderDate] >= @OrderDate


USE Northwind
GO
EXEC GetByOrderDate '1996-10-10 0:00:00'

  

 

2、调用存储过程

 

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "[GetOrdersByOrderDate]";
                cmd.Connection = conn;

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime, 8).Value = "1998-5-5";

                conn.Open();

                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;

                DataSet ds = new DataSet();

                da.Fill(ds);

                gvOrders.DataSource = ds;
                gvOrders.DataBind();
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                conn.Close();
            }
        }

  

 

3、输出参数

存储过程可以通过输出参数来返回值。

 

CREATE PROC [DBO].[GetOrderDetailsTotalByProductID]
    @ProductID INT,
    @Total MONEY OUTPUT
AS
    SELECT @Total = SUM([UnitPrice]*[Quantity])
    FROM
        [Order Details]
    WHERE
        [ProductID] = @ProductID

 

SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "[GetOrderDetailsTotalByProductID]";
                cmd.Connection = conn;

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@ProductID", SqlDbType.Int, 4).Value = 21;
                cmd.Parameters.Add("@Total", SqlDbType.Money).Direction = ParameterDirection.Output;

                conn.Open();
                cmd.ExecuteNonQuery();

                lblTotal.Text = cmd.Parameters["@Total"].Value.ToString();
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                conn.Close();
            }

  

  

 

4、Return 返回值

使用返回值表示存储过程的执行状态,它类似于输出参数,其区别:

(1)、返回值只能返回sql整数值;

(2)、返回值不能在存储过程内部声明,它使用Transcat-SQL的RETURN语句返回;

 

 

CREATE PROC [DBO].[GetOrdersByCustomerID]
    @CustomerID INT,
    @OrderDate DATETIME OUTPUT
AS
    SELECT @OrderDate = MAX([OrderDate])
    FROM
        [Orders]
    WHERE
        [CustomerID] = @CustomerID

    IF @OrderDate IS NULL
        RETURN 0
    ELSE
        RETURN 1

 

SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "[GetOrdersByEmployeeID]";
                cmd.Connection = conn;

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
                cmd.Parameters.Add("@EmployeeID", SqlDbType.Int, 4).Value = 1;
                cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime).Direction = ParameterDirection.Output;

                conn.Open();
                cmd.ExecuteNonQuery();

                lblReturnValue.Text = cmd.Parameters["@ReturnValue"].Value.ToString();
                lblOrderDate.Text = cmd.Parameters["@OrderDate"].Value.ToString();
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                conn.Close();
            }

  

 

 

目录
相关文章
|
1月前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
3月前
|
存储 编解码 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
37 0
|
29天前
|
开发框架 小程序 .NET
C#动态生成带参数的小程序二维码
C#动态生成带参数的小程序二维码
|
3月前
|
存储 C#
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。
43 0
|
4月前
|
C# 数据安全/隐私保护
C# 窗体之间参数互相传递的两种方法与使用
C# 窗体之间参数互相传递的两种方法与使用
|
6月前
|
存储 SQL 关系型数据库
MySQL操作之存储过程
MySQL操作之存储过程
33 0
|
6月前
|
C#
命令调用C#程序, 路径参数解析错误
命令调用C#程序, 路径参数解析错误
|
8月前
|
存储 API C#
Baumer工业相机堡盟工业相机如何通过文件保存和导入的方式保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过文件保存和导入的方式保存和载入相机的各类参数(C#)
53 0
|
19天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
1月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
28 0
Mysql基础第二十六天,使用存储过程