ASP程序与SQL存储过程结合使用详解

来源:asp之家 时间:2011-03-25 10:50:00 

定义总是很抽象。存储进程其实就是能完成一定操作的一组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相同

标签:ASP,SQL,存储过程
0
投稿

猜你喜欢

  • 适合各种浏览器的js拖动层

    2007-10-22 22:43:00
  • 解决 IE6 内存泄露的另类方法

    2008-07-06 23:05:00
  • 用css和js实现firefox和IE支持局部打印

    2008-05-23 13:04:00
  • js鼠标动画特效

    2007-09-26 18:31:00
  • asp将数据库中的信息存储至XML文件中

    2007-09-19 12:54:00
  • 用户体验如何提升阿里巴巴的商业价值

    2009-07-23 20:29:00
  • 查询数据表中的记录(SELECT)

    2009-02-27 16:06:00
  • 各种SQL语句速查手册

    2007-09-27 19:31:00
  • asp如何用下拉列表显示数据库里的内容?

    2010-06-16 09:54:00
  • 如何用Cookie进行登录验证?

    2010-06-12 12:34:00
  • 5招优化MySQL插入方法

    2009-04-02 10:49:00
  • [译]如何设计网页小广告(banner)

    2009-10-16 20:40:00
  • oracle sys_connect_by_path 函数 结果集连接

    2009-07-12 18:48:00
  • asp如何在第10000名来访者访问时显示中奖页面?

    2010-06-18 19:45:00
  • 网页设计:巧用记事本编辑网页

    2008-02-05 09:00:00
  • IIS上设置301跳转,实现ASP带参数跳转

    2011-04-08 12:52:00
  • 设计从"心"开始

    2011-05-21 08:37:00
  • [译]2009年海外Web设计风潮(下)

    2009-01-23 09:34:00
  • 段正淳的css笔记(4)css代码的简写

    2007-11-01 22:03:00
  • JavaScript 日期联动选择器

    2010-08-01 10:18:00
  • asp之家 网络编程 m.aspxhome.com