• 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
  • 相关阅读:
    liunx基本命令
    liunx—awk
    python—__name__
    python—url路径拼接/编码
    python—__init__作用
    单元测试
    2、选择排序
    1、算法简介
    在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
    如何明确区分代码中的1和l
  • 原文地址:https://www.cnblogs.com/renshengbuduanxuexi/p/5272370.html
Copyright © 2020-2023  润新知