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


    本文转载: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 GetOrdersByOrderDate'1996-10-10 0:00:00'
    View Code

    2、调用存储过程

     1 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
     2  
     3             try
     4             {
     5                 SqlCommand cmd = new SqlCommand();
     6                 cmd.CommandText = "[GetOrdersByOrderDate]";
     7                 cmd.Connection = conn;
     8  
     9                 cmd.CommandType = CommandType.StoredProcedure;
    10  
    11                 cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime, 8).Value = "1998-5-5";
    12  
    13                 conn.Open();
    14  
    15                 SqlDataAdapter da = new SqlDataAdapter();
    16                 da.SelectCommand = cmd;
    17  
    18                 DataSet ds = new DataSet();
    19  
    20                 da.Fill(ds);
    21  
    22                 gvOrders.DataSource = ds;
    23                 gvOrders.DataBind();
    24             }
    25             catch (SqlException ex)
    26             {
    27                 throw new Exception(ex.Message, ex);
    28             }
    29             finally
    30             {
    31                 conn.Close();
    32             }
    33         }
    调用存储过程

    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();
                }
    View Code

    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();
                }
    View Code
  • 相关阅读:
    公式中表达单个双引号【"】和空值【""】的方法及说明
    Ext.net CRUD
    水煮肉片
    配置传入电子邮件(Office SharePoint Server 管理中心帮助)
    CodeSmith开发系列资料总结
    报表中的Excel操作之Aspose.Cells(Excel模板)
    40个UI设计工具和资源
    配置Sharepoint传入/传出电子邮件a
    联想乐Pad_A1获取root权限
    Windows Azure
  • 原文地址:https://www.cnblogs.com/renshengbuduanxuexi/p/5272370.html
Copyright © 2020-2023  润新知