zoukankan      html  css  js  c++  java
  • C#.NET中使用存储过程的方法及其优点

    原文发布时间为:2008-09-26 —— 来源于本人的百度文章 [由搬家工具导入]

    一.使用存储过程的优点

       作为服务器端的代码,存储过程具有以下优点:
    1) 存储过程是预先编译过的,是执行查询或者批处理的最快方法.
    2)在服务器而不是桌面计算机上执行程序可以极大地降低网络流量.
    3)存储过程是模块化的,易于部署,代码也容易修改.如果前端的程序是通过调用存储过程就可以升级所有

    客户的应用程序
    4)存储过程是数据库安全性的一个重要组成部分.如果所有的用户都是通过存储过程来访问数据,那么,就

    可以禁止用户对表的直接访问,并控制所有对数据的访问.


    二.在.NET中使用存储过程中一个简单示例:


       private SqlCommand GetLoadCommand()
            {
                if ( loadCommand == null )
                {
                    //
                    // Construct the command since we don't have it already
                    //
                    loadCommand = new SqlCommand("GetCustomerByEmail",new SqlConnection

    (DuwamishConfiguration.ConnectionString));
                    loadCommand.CommandType = CommandType.StoredProcedure;
           
                    loadCommand.Parameters.Add(new SqlParameter(EMAIL_PARM, SqlDbType.NVarChar,

    50));
                }
               
                return loadCommand;
            }

       在初始化SqlCommand的参数中"GetCustomerByEmail"就是存储过程的名称,而SqlCommand另外一个参数

    是sqlconnection参数,用于链接数据库.而在"GetCustomerByEmail"的参数可以直接写成sql的查询语句,

    在此处使用存储过程不但是读取和修改数据库的过程更易于管理,而且执行速度会加快
       在数据库"GetCustomerByEmail"的存储过程为:
       --------------------------------------------------
    -- GetCustomerByEmail
    --------------------------------------------------
    CREATE PROCEDURE GetCustomerByEmail
        @Email NVARCHAR(50) = NULL
    AS
        SET NOCOUNT ON

        SELECT c.PKId,
               c.Email,
               c.Password,
               c.Name,
               a.Address,
               a.Country,
               a.PhoneNumber,
               a.Fax
          FROM Customers c,
               Addresses a
         WHERE c.Email = @Email
           AND a.CustomerId = c.PKId

        RETURN 0
    --------------------------------------------------
    -- unique index on Customers (Email)
    -- duplicate index on Addresses (CustomerId)
    --------------------------------------------------

    GO

    三. 存储过程基本语法:(要详细了解存储过程里的语法,推荐看"使用Transact-SQL编程")


    1.向存储过程传递数据
       1)可以在create procedure命令中的存储过程名之后列出要添加的参数.每个 参数都必须以@打头.它

    会成为该存储过程中的局部变量
       2)在调用存储过程中,必须为这些输入变量提供值
    例子:
    create procedure CategoryGet( @CategoryName NVARCHAR(35))
    AS
    select ProductCategoryNameProductCategoryDesription
    From dbo.ProductCategory
    Where ProductCategorName=@CategoryName


    EXEC CategoryGet 'Kite'

    2. 参数的默认值
    CREATE PROCEDURE StroredProcedure(
    @Variable DateType =DefaultVaule
    )

    3.从存储过程返回数据
    1) 输出参数:无论在创建存储过程的时候,还是在调用它的时候,都必须使用关键字output.在存储过程中,

    输出参数就像是局部变量一样.在调用存储过程的程序或者批处理中,必须在调用存储过程之前创建接收输

    出参数数据的变量.当存储过程执行完毕后,就会将输出参数的当前值传递给调用过程的局部变量.

    例子:
    Create proc GetProductName(
       @ProductCode CHAR(10),
       @ProductName VARCHAR(25) OUTPUT)
    AS
    Select @ProductName = ProductName
    From dbo.Product
    WHERE Code = @ProductCode

    调用该存储过程的批处理如下:
    Declare @ProdName VARCHAR(25)
    EXEC GetProductName '1001', @ProdName OURPUT
    Print @ProdName


    4. 使用RETURN命令
       return命令会无条件地终止存储过程地执行,并向调用它地批处理或者客户返回一个值.
       返回值0表示执行成功,它也是默认的返回值.-99到-1之间的值是Microsoft保留给SQLServer使用的,所

    以建议使用-100或者更小的值来返回失败的状态.
       在调用存储过程时,必须按照如下方式在exec命令中使用一个局部的整数型变量来获取返回的状态值.
    DECLARE @IntLocalVariable INT
    EXEC @IntLocalVariable= StoredProcedureName

    5. 返回数据的途径及其适用范围
       任意存储过程在选择返回数据的方法时都面临着4种可能(select, raiserror,输出参数和return)
       适用范围如下:
       1)return和输出参数(output parameters)都是将数据返回给SQLserver中直接调用存储过程的程序或

    者批处理
       2)raiserror和select语句返回的记录集都是直接返回给最终用户的客户应用程序的


    四. 调试存储过程:


    1)查看结果:
        打开查询分析器,找到需要调试的存储过程,并按右键--打开,即会出现一个"执行过程"的窗口,只要把

    所有参数值都赋好值,就可以看到该存储过程的执行结果
    2)单步跟踪:
        同样打开查询分析器,找到需要调试的存储过程,并按右键--调试.调试器所要完成的全部工作就是一

    次一条命令地执行存储过程.使用工具条上的按钮可以对单步执行代码的过程进行控制.在单步执行过程的

    时候,使用"单步进入"(Step into)可以 执行单条命令.使用"单步跳过"(Step over)按钮也可以执行单条

    命令,如果当前的命令调用了另一个存储过程,它将会把这个存储过程作为一个完整的单元来执行,不会跟

    踪进入.使用"运行至光标"(Step to cursor)按钮可以连续执行多条命令,知道光标所指定的那一行命令为

    止.

    注:要赋予登陆用户系统管理员的权限,才可以进行对存储过程的调试.

  • 相关阅读:
    1定位与 2一些小标签的使用 3版心作用 4元素之间的转换 5项目准备
    H5 canvas建造敌人坦克
    H5 canvas控制坦克移动2
    H5 canvas控制坦克移动
    使用H5 canvas画一个坦克
    JSON
    inline-block元素间距问题的几种解决方案
    CSS垂直居中的11种实现方式
    30分钟误操作提示 您因长时间未进行操作导致页面过期
    多啦A梦css3
  • 原文地址:https://www.cnblogs.com/handboy/p/7141625.html
Copyright © 2011-2022 走看看