对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实
- Set Mypara = MyComm.CreateParameter("RETURN",2,4)
- MyComm.Parameters.Append MyPara
可以简化为
- MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
甚至还可以继续简化,稍后会做说明。
对于带参数的存储过程,只能使用Command对象调用(也有资料说可通过Connection对象或Recordset对象调用,但我没有试成过)。
4. 有输入参数和输出参数的存储过程
返回值其实是一种特殊的输出参数。在大多数情况下,我们用到的是同时有输入及输出参数的存储过程,比如我们想取得用户信息表中,某ID用户的用户名,这时候,有一个输入参数----用户ID,和一个输出参数----用户名。实现这一功能的存储过程如下:
- /*SP4*/
- CREATE PROCEDURE dbo.getUserName
- @UserID int,
- @UserName varchar(40) output
- as
- set nocount on
- begin
- if @UserID is null return
- 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" ''指定存储过程名
- .CommandType = 4 ''表明这是一个存储过程
- .Prepared = true ''要求将SQL命令先行编译
- .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
- .Parameters.append .CreateParameter("@UserName",200,2,40)
- .Execute
- end with
- UserName = MyComm(1)
- Set MyComm = Nothing
假