原文发布时间为: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)按钮可以连续执行多条命令,知道光标所指定的那一行命令为

止.

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

C#.NET中使用存储过程的方法及其优点的更多相关文章

  1. Entity Framework 4.3 中使用存储过程

    尽管 Entity Framework 4.3 都已经发布了,且表示在 EF 5 中性能将会有很大提升.但很多存储过程控,始终不会放弃使用存储过程,那今天就让我们看看在 EF 4.3 中怎么使用存储过 ...

  2. ASP.NET中调用存储过程方法

    两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的“官方”方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明.本文所 ...

  3. Entity Framework 6 Recipes 2nd Edition(10-6)译 -> TPT继承模型中使用存储过程

    10-6. TPT继承模型中使用存储过程 问题 想在一个TPT继承模型中使用存储过程 解决方案 假设已有如Figure 10-6所示模型. 在模型里, Magazine(杂志) and DVD继承于基 ...

  4. Entity Framework 6 Recipes 2nd Edition(10-7)译 -> TPH继承模型中使用存储过程

    10-7. TPH继承模型中使用存储过程 问题 用一个存储过程来填充TPH继承模型的实体 解决方案 假设已有如Figure 10-7所示模型. 我们有两个派生实体: Instructor(教员)和St ...

  5. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  6. Qt调用Server SQL中的存储过程

    Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...

  7. mysql开发中使用存储过程

    在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...

  8. sql 解析字符串添加到临时表中 sql存储过程in 参数输入

    sql 解析字符串添加到临时表中  sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表   FROM dbo.Func_SplitOneCol ...

  9. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

    一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...

随机推荐

  1. JavaScript两种创建标签的的方法,实现点击按钮让text自增

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 2.在Cisco Packet Tracer里交换机默认网关的配置(实现跨网段telnet)

    我们将在此拓扑图的基础上进行实验 大多命令都可用tab键位来补齐 1.分别给pc机设置好ip地址 pc2为:192.168.1.1 pc3为:192.168.2.1 两台计算机处在不同的网段之中 2. ...

  3. tcl之list操作

  4. HDU4616 树形DP+三次深搜

    这题和之前那个HDU2616有着奇妙的异曲同工之处..都是要求某个点能够到达的最大权重的地方... 但是,这题加了个限制,要求最多只能够踩到C个陷阱,一单无路可走或者命用光了,就地开始清算总共得分之和 ...

  5. 51NOD 1292 1277(KMP算法,字符串中的有限状态自动机)

    在前两天的CCPC网络赛中...被一发KMP题卡了住了...遂决定,哪里跌倒就在哪里爬起来...把个KMP恶补一发,连带着把AC自动机什么的也整上. 首先,介绍设定:KMP算法计划解决的基本问题是,两 ...

  6. Maya

    建立酒杯的方法(CV曲线) surface(曲面)-- creat cv curve tool-- control vertex(调整图形)[再次creat cv建立厚度,只需要建立酒杯的上口]--- ...

  7. P1194 买礼物(建模)

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  8. 使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

    由于园子里有不少用户在使用dnspod,我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下,以免再有人踩着这个坑. 12月11日,我们登录到dnspod的后台时,大 ...

  9. PostgreSQL 数组类型

    PostgreSQL 支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型.用户自定义的类型.枚举类型, 以及组合类型.但目前还不支持 domain 类型. 数组类型的 ...

  10. Leetcode 630.课程表III

    课程表III 这里有 n 门不同的在线课程,他们按从 1 到 n 编号.每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天.一门课要持续学习 t 天直到第 d天时要完成,你将会从第 ...