end go 该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:
’**通过Command对象调用存储过程** DIM MyComm Set MyComm = Server.CreateObject("ADODB.Command") MyComm.ActiveConnection = MyConStr ’MyConStr是数据库连接字串 MyComm.CommandText = "delUserAll" ’指定存储过程名 MyComm.CommandType = 4 ’表明这是一个存储过程 MyComm.Prepared = true ’要求将SQL命令先行编译 MyComm.Execute ’此处不必再取得记录集 Set MyComm = Nothing 当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。
3. 有返回值的存储过程
在进行类似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表明这是一个返回值。此参数取值的说明如下: |