SELECT @USERNAME=USERNAME
FROM DBO.[USERINFO]
WHERE USERID=@USERID
RETURN
END
GO
调用该存储进程的ASP代码如下:
'**调用带有输入输出参数的存储进程**
DIM MYCOMM,USERID,USERNAME
USERID = 1
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
MYCOMM.COMMANDTEXT = "GETUSERNAME" '指定存储进程名
MYCOMM.COMMANDTYPE = 4 '表明这是一个存储进程
MYCOMM.PREPARED = TRUE '要求将SQL命令先行编译
'声明参数
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER("@USERID",3,1,4,USERID)
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER("@USERNAME",200,2,40)
MYCOMM.EXECUTE
'取得出参
USERNAME = MYCOMM(1)
SET MYCOMM = NOTHING
在以上代码中,可以看到,与声明返回值不同,声明输入参数时需要5个参数,声明输出参数时需要4个参数。声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值。声明输出参数时,没有最后一个参数:参数值。
需要特别注意的是:在声明参数时,顺序一定要与存储进程中定义的顺序相同,而且各参数的数据类型、长度也要与存储进程中定义的相同。
如果存储进程有多个参数,ASP代码会显得繁琐,可以使用WITH命令简化代码:
'**调用带有输入输出参数的存储进程(简化代码)**
DIM MYCOMM,USERID,USERNAME
USERID = 1
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
WITH MYCOMM
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
.COMMANDTEXT = "GETUSERNAME" '指定存储进程名