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


          END IF
       END WITH
       USERNAME = USERNAME + MYCOMM(1) + ","   '也许你喜欢用数组存储
    NEXT
    SET MYCOMM = NOTHING

    通过以上代码可以看出:重复调用同一存储进程时,只需为值发生改变的输入参数重新赋值即可,这一方法在有多个输入输出参数,且每次调用时只有一个输入参数的值发生变化时,可以大大减少代码量。


    5. 同时具有返回值、输入参数、输出参数的存储进程
    前面说过,在调用存储进程时,声明参数的顺序要与存储进程中定义的顺序相同。还有一点要特别注意:如果存储进程同时具有返回值以及输入、输出参数,返回值要最先声明。
    为了演示这种情况下的调用方法,我们改善一下上面的例子。还是取得ID为1的用户的用户名,但是有可能该用户不具有(该用户已删除,而USERID是自增长的字段)。存储进程根据用户具有与否,返回不同的值。此时,存储进程和ASP代码如下:

    /*SP5*/
    CREATE PROCEDURE DBO.GETUSERNAME
       --为了加深对"顺序"的印象,将以下两参数的定义顺序颠倒一下
       @USERNAME VARCHAR(40) OUTPUT,
       @USERID INT
    AS
    SET NOCOUNT ON
    BEGIN
       IF @USERID IS NULL RETURN
       SELECT @USERNAME=USERNAME
           FROM DBO.[USERINFO]
           WHERE USERID=@USERID
       IF @@ROWCOUNT>0
          RETURN 1
       ELSE
          RETURN 0
       RETURN
    END
    GO

   '**调用同时具有返回值、输入参数、输出参数的存储进程**
    DIM MYCOMM,USERID,USERNAME
    USERID = 1
    SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
    WITH MYCOMM
       .ACTIVECONNECTION = MYCONSTR          'MYCONSTR是数据库连接字串
       .COMMANDTEXT      = "GETUSERNAME"     '指定存储进程名

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

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