ASP程序与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是一般的命令类型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2213.html