- ''**调用返回多个记录集的存储过程**
- DIM checklg,UserID,UserName,UserTel,UserMail
- DIM MyComm,MyRst
- UserID = 1
- ''checklogin()为自定义函数,判断访问者是否登录
- checklg = checklogin()
- Set MyComm = Server.CreateObject("ADODB.Command")
- with MyComm
- .ActiveConnection = MyConStr ''MyConStr是数据库连接字串
- .CommandText = "getUserInfo" ''指定存储过程名
- .CommandType = 4 ''表明这是一个存储过程
- .Prepared = true ''要求将SQL命令先行编译
- .Parameters.append .CreateParameter("@userid",3,1,4,UserID)
- .Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
- Set MyRst = .Execute
- end with
- Set MyComm = Nothing
- ''从第一个记录集中取值
- UserName = MyRst(0)
- ''从第二个记录集中取值
- if not MyRst is Nothing then
- Set MyRst = MyRst.NextRecordset()
- UserTel = MyRst(0)
- UserMail = MyRst(1)
- end if
- Set MyRst = Nothing
以上代码中,利用Recordset对象的NextRecordset方法,取得了存储过程返回的多个记录集。
至此,针对ASP调用存储过程的各种情况,本文已做了较为全面的说明。最后说一下在一个ASP程序中,调用多个存储过程的不同方法。
在一个ASP程序中,调用多个存储过程至少有以下三种方法是可行的:
1. 创建多个Command对象
- DIM MyComm
- Set MyComm = Server.CreateObject("ADODB.Command")
- ''调用存储过程一
- ......
- Set MyComm = Nothing
- Set MyComm = Server.CreateObject("ADODB.Command")
- ''调用存储过程二
- ......
- Set MyComm = Nothing
- ......
2. 只创建一个Command对象,结束一次调用时,清除其参数
- DIM MyComm
- Set MyComm = Server.CreateObject("ADODB.Command")
- ''调用存储过程一
- .....
- ''清除参数(假设有三个参数)
- MyComm.Parameters.delete 2
- MyComm.Parameters.delete 1
- MyComm.Parameters.delete 0
- ''调用存储过程二并清除参数
- ......
- Set MyComm = Nothing
此时要注意:清除参数的顺序与参数声明的顺序相反,原因嘛,我也不知道。
3. 利用Parameters数据集合的Refresh方法重置Parameter对象
- DIM MyComm
- Set MyComm = Server.CreateObject("ADODB.Command")
- ''调用存储过程一
- .....
- ''重置Parameters数据集合中包含的所有Parameter对象
- MyComm.Parameters.Refresh
- ''调用存储过程二
- .....
- Set MyComm = Nothing
一