ASP开发中存储过程应用全接触(1)

ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过。我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事。对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们根本就是千篇一律,互相抄袭,稍微复杂点的应用,就全都语焉不详了。
  
    现在,我基本上通过调用存储过程访问SQL Server,以下的文字都是实践的总结,希望对大家能有帮助。
  
    存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
  
    定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
  
    第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
  
    第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
  
    第三、有利于SQL语句的重用。
  
    在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
  
    1. 只返回单一记录集的存储过程
  
    假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):
  
  /*SP1*/
  CREATE PROCEDURE dbo.getUserList
  as
  set nocount on
  begin
  select * from dbo.[userinfo]
  end
  go
  
    以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过command对象调用该存储过程的ASP代码如下:
  
  '**通过Command对象调用存储过程**
  DIM MyComm,MyRst
  Set MyComm = Server.CreateObject("ADODB.Command")
  MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
  MyComm.CommandText = "getUserList" '指定存储过程名
  MyComm.CommandType = 4 '表明这是一个存储过程
  MyComm.Prepared = true '要求将SQL命令先行编译
  Set MyRst = MyComm.Execute
  Set MyComm = Nothing
  
    存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
  
    在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
  
    -1 表明CommandText参数的类型无法确定
    1 表明CommandText是一般的命令类型
    2 表明CommandText参数是一个存在的表名称
    4 表明CommandText参数是一个存储过程的名称
  
    还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:
  
  '**通过Connection对象调用存储过程**
  DIM MyConn,MyRst
  Set MyConn = Server.CreateObject("ADODB.Connection")
  MyConn.open MyConStr 'MyConStr是数据库连接字串
  Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandType
  Set MyConn = Nothing
  
  '**通过Recordset对象调用存储过程**
  DIM MyRst
  Set MyRst = Server.CreateObject("ADODB.Recordset")
  MyRst.open "getUserList",MyConStr,0,1,4
  'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同
  
    2. 没有输入输出的存储过程
  
    请看以下存储过程:
  
  /*SP2*/
  CREATE PROCEDURE dbo.delUserAll
  as
  set nocount on
  begin
  delete from dbo.[userinfo]
  end
  go
  
    该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:
  
  '**通过Command对象调用存储过程**
  DIM MyComm
  Set MyComm = Server.CreateObject("ADODB.Command")
  MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
  MyComm.CommandText = "delUserAll" '指定存储过程名
  MyComm.CommandType = 4 '表明这是一个存储过程
  MyComm.Prepared = true '要求将SQL命令先行编译
  MyComm.Execute '此处不必再取得记录集
  Set MyComm = Nothing
  
    当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=659523 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值