asp 有返回值的存储过程代码
有返回值的存储进程
在进行类似SP2的操作时,应充分利用SQL SERVER强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储进程返回执行情况,为此,将SP2修改如下:
/*SP3*/
CREATE PROCEDURE DBO.DELUSERALL
AS
SET NOCOUNT ON
BEGIN
BEGIN TRANSACTION
DELETE FROM DBO.[USERINFO]
IF @@ERROR=0
BEGIN
COMMIT TRANSACTION
RETURN 1
END
ELSE
BEGIN
ROLLBACK TRANSACTION
RETURN 0
END
RETURN
END
GO
以上存储进程,在DELETE顺利执行时,返回1,否则返回0,并进行回滚操作。为了在ASP中取得返回值,需要利用PARAMETERS集合来声明参数:
'**调用带有返回值的存储进程并取得返回值**
DIM MYCOMM,MYPARA
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
MYCOMM.COMMANDTEXT = "DELUSERALL" '指定存储进程名
MYCOMM.COMMANDTYPE = 4 '表明这是一个存储进程
MYCOMM.PREPARED = TRUE '要求将SQL命令先行编译
'声明返回值
SET MYPARA = MYCOMM.CREATEPARAMETER("RETURN",2,4)
MYCOMM.PARAMETERS.APPEND MYPARA
MYCOMM.EXECUTE
'取得返回值
DIM RETVALUE
RETVALUE = MYCOMM(0) '或RETVALUE = MYCOMM.PARAMETERS(0)
SET MYCOMM = NOTHING
在MYCOMM.CREATEPARAMETER("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储进程中声明的参数名相同。此处是返回值,我习气上设为"RETURE";
第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
ADBIGINT: 20 ;
ADBINARY : 128 ;
ADBOOLEAN: 11 ;
ADCHAR: 129 ;
ADDBTIMESTAMP: 135 ;
ADEMPTY: 0 ;
ADINTEGER: 3 ;
ADSMALLINT: 2 ;
ADTINYINT: 16 ;
ADVARCHAR: 200 ;
对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值
以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实
SET MYPARA = MYCOMM.CREATEPARAMETER("RETURN",2,4)
MYCOMM.PARAMETERS.APPEND MYPARA
可以简化为
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER("RETURN",2,4)
甚至还可以继续简化,稍后会做说明。
对于带参数的存储进程,只能使用COMMAND对象调用(也有资料说可通过CONNECTION对象或RECORDSET对象调用,但我没有试成过)。
补充:asp教程,高级应用