zoukankan      html  css  js  c++  java
  • ASP.NET 存储过程操作

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

    1、创建存储过程


    代码
     1 USE Northwind
     2 GO
     3 CREATE PROC [DBO].[GetOrdersByOrderDate]
     4     @OrderDate DATETIME
     5 AS
     6     SELECT
     7         [OrderID],[CustomerID],[OrderDate]
     8     FROM
     9         [Orders]
    10     WHERE
    11         [OrderDate] >= @OrderDate
    12 
    13 
    14 USE Northwind
    15 GO
    16 EXEC GetByOrderDate '1996-10-10 0:00:00'
    17 


    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         }
    34 


    3、输出参数

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

    代码
     1 USE Northwind
     2 GO
     3 CREATE PROC [DBO].[GetOrderDetailsTotalByProductID]
     4     @ProductID INT,
     5     @Total MONEY OUTPUT
     6 AS
     7     SELECT @Total = SUM([UnitPrice]*[Quantity])
     8     FROM
     9         [Order Details]
    10     WHERE
    11         [ProductID] = @ProductID
    12 


    代码
     1 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
     2 
     3             try
     4             {
     5                 SqlCommand cmd = new SqlCommand();
     6                 cmd.CommandText = "[GetOrderDetailsTotalByProductID]";
     7                 cmd.Connection = conn;
     8 
     9                 cmd.CommandType = CommandType.StoredProcedure;
    10 
    11                 cmd.Parameters.Add("@ProductID", SqlDbType.Int, 4).Value = 21;
    12                 cmd.Parameters.Add("@Total", SqlDbType.Money).Direction = ParameterDirection.Output;
    13 
    14                 conn.Open();
    15                 cmd.ExecuteNonQuery();
    16 
    17                 lblTotal.Text = cmd.Parameters["@Total"].Value.ToString();
    18             }
    19             catch (SqlException ex)
    20             {
    21                 throw new Exception(ex.Message, ex);
    22             }
    23             finally
    24             {
    25                 conn.Close();
    26             }
    27 


    4Return 返回值

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

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

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

    代码
     1 USE Northwind
     2 GO
     3 CREATE PROC [DBO].[GetOrdersByCustomerID]
     4     @CustomerID INT,
     5     @OrderDate DATETIME OUTPUT
     6 AS
     7     SELECT @OrderDate = MAX([OrderDate])
     8     FROM
     9         [Orders]
    10     WHERE
    11         [CustomerID] = @CustomerID
    12 
    13     IF @OrderDate IS NULL
    14         RETURN 0
    15     ELSE
    16         RETURN 1
    17 


    代码
     1 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
     2 
     3             try
     4             {
     5                 SqlCommand cmd = new SqlCommand();
     6                 cmd.CommandText = "[GetOrdersByEmployeeID]";
     7                 cmd.Connection = conn;
     8 
     9                 cmd.CommandType = CommandType.StoredProcedure;
    10 
    11                 cmd.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
    12                 cmd.Parameters.Add("@EmployeeID", SqlDbType.Int, 4).Value = 1;
    13                 cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime).Direction = ParameterDirection.Output;
    14 
    15                 conn.Open();
    16                 cmd.ExecuteNonQuery();
    17 
    18                 lblReturnValue.Text = cmd.Parameters["@ReturnValue"].Value.ToString();
    19                 lblOrderDate.Text = cmd.Parameters["@OrderDate"].Value.ToString();
    20             }
    21             catch (SqlException ex)
    22             {
    23                 throw new Exception(ex.Message, ex);
    24             }
    25             finally
    26             {
    27                 conn.Close();
    28             }
    29 


  • 相关阅读:
    excel如何设置输入数字后单元格自动填充颜色
    怎样在excel中添加下拉列表框
    System.Security.Cryptography.CryptographicException 出现了内部错误
    怎样让webservice在浏览器远程浏览时像在本地浏览一样有参数输入框
    EF实体框架常见问题
    jdk安装环境变量设置
    IIS网站部署注意点
    浏览器被hao.360.cn劫持怎么办
    python-字典
    python-list列表
  • 原文地址:https://www.cnblogs.com/libingql/p/1726104.html
Copyright © 2011-2022 走看看