ount
DIM MyComm,MyRst
pagenow = Request("pn")
''自定义函数用于验证自然数
if CheckNar(pagenow) = false then pagenow = 1
pagesize = 20
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr ''MyConStr是数据库连接字串
.CommandText = "getUserList" ''指定存储过程名
.CommandType = 4 ''表明这是一个存储过程
.Prepared = true ''要求将SQL命令先行编译
''返回值(记录总量)
.Parameters.Append .CreateParameter("RETURN",2,4)
''出参(总页数)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
''入参(当前页号)
.Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)
''入参(每页记录数)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
Set MyRst = .Execute
end with
if MyRst.state = 0 then ''未取到数据,MyRst关闭
recordcount = -1
else
MyRst.close ''注意:若要取得参数值,需先关闭记录集对象
recordcount = MyComm(0)
pagecount = MyComm(1)
if cint(pagenow)> =cint(pagecount) then pagenow=pagecount
end if
Set MyComm = Nothing
''以下显示记录
if recordcount = 0 then
Response.Write "无记录"
elseif recordcount > 0 then
MyRst.open
do until MyRst.EOF
......
loop
''以下显示分页信息
......
else ''recordcount=-1
Response.Write "参数错误"
end if
对于以上代码,只有一点需要说明:同时返回记录集和参数时,若要取得参数,需先将记录集关闭,使用记录集时再将
其打开。
7. 返回多个记录集的存储过程
本文最先介绍的是返回记录集的存储过程。有时候,需要一个存储过程返回多个记录集,在ASP中,如何同时取得这些
记录集呢?为了说明这一
问题,在userinfo表中增加两个字段:usertel及usermail,并设定只有登录用户可以查看这两项
内容。
/*SP7*/
CREATE PROCEDURE dbo.getUserInfo
@userid int,
@checklogin bit
as
set nocount on
begin
if @userid is null or @checklogin is null return
select username
from dbo.[usrinfo]
where userid=@userid
--若为登录用户,取usertel及usermail
if @checklogin=1
select usertel,usermail
from dbo.[userinfo]
where userid=@userid
return
end
go
以下是ASP代码:
''**调用返回多个记录集的存储过程**
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方法,取得了存储过程返回的多个记录集。