ASP下存儲過程編寫入門全接觸第4/5頁
更新時(shí)間:2007年10月23日 20:32:55 作者:
復(fù)制代碼 代碼如下:
'**調(diào)用同時(shí)具有返回值、輸入?yún)?shù)、輸出參數(shù)的存儲過程**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串
.CommandText = "getUserName" '指定存儲過程名
.CommandType = 4 '表明這是一個(gè)存儲過程
.Prepared = true '要求將SQL命令先行編譯
'返回值要最先被聲明
.Parameters.Append .CreateParameter("RETURN",2,4)
'以下兩參數(shù)的聲明順序也做相應(yīng)顛倒
.Parameters.append .CreateParameter("@UserName",200,2,40)
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Execute
end with
if MyComm(0) = 1 then
UserName = MyComm(1)
else
UserName = "該用戶不存在"
end if
Set MyComm = Nothing
有時(shí)候,我們需要存儲過程同時(shí)返回參數(shù)和記錄集,比如在利用存儲過程分頁時(shí),要同時(shí)返回記錄集以及數(shù)據(jù)總量等參數(shù)。以下給出一個(gè)進(jìn)行分頁處理的存儲過程:
/*SP6*/
CREATE PROCEDURE dbo.getUserList
@iPageCount int OUTPUT, --總頁數(shù)
@iPage int, --當(dāng)前頁號
@iPageSize int --每頁記錄數(shù)
as
set nocount on
begin
--創(chuàng)建臨時(shí)表
create table #t (ID int IDENTITY, --自增字段
userid int,
username varchar(40))
--向臨時(shí)表中寫入數(shù)據(jù)
insert into #t
select userid,username from dbo.[UserInfo]
order by userid
--取得記錄總數(shù)
declare @iRecordCount int
set @iRecordCount = rowcount
--確定總頁數(shù)
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
ELSE
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--若請求的頁號大于總頁數(shù),則顯示最后一頁
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
--確定當(dāng)前頁的始末記錄
DECLARE @iStart int --start record
DECLARE @iEnd int --end record
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
--取當(dāng)前頁記錄
select * from #t where ID> @iStart and ID <@iEnd
--刪除臨時(shí)表
DROP TABLE #t
--返回記錄總數(shù)
return @iRecordCount
end
go
在上面的存儲過程中,輸入當(dāng)前頁號及每頁記錄數(shù),返回當(dāng)前頁的記錄集,總頁數(shù)及記錄總數(shù)。為了更具典型性,將記錄總數(shù)以返回值的形式返回。以下是調(diào)用該存儲過程的ASP代碼(具體的分頁操作略去):
'**調(diào)用分頁存儲過程**
DIM pagenow,pagesize,pagecount,recordcount
DIM MyComm,MyRst
pagenow = Request("pn")
'自定義函數(shù)用于驗(yàn)證自然數(shù)
if CheckNar(pagenow) = false then pagenow = 1
pagesize = 20
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串
.CommandText = "getUserList" '指定存儲過程名
.CommandType = 4 '表明這是一個(gè)存儲過程
.Prepared = true '要求將SQL命令先行編譯
'返回值(記錄總量)
.Parameters.Append .CreateParameter("RETURN",2,4)
'出參(總頁數(shù))
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'入?yún)?當(dāng)前頁號)
.Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)
'入?yún)?每頁記錄數(shù))
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
Set MyRst = .Execute
end with
if MyRst.state = 0 then '未取到數(shù)據(jù),MyRst關(guān)閉
recordcount = -1
else
MyRst.close '注意:若要取得參數(shù)值,需先關(guān)閉記錄集對象
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 "參數(shù)錯(cuò)誤"
end if
對于以上代碼,只有一點(diǎn)需要說明:同時(shí)返回記錄集和參數(shù)時(shí),若要取得參數(shù),需先將記錄集關(guān)閉,使用記錄集時(shí)再將其打開。
相關(guān)文章
asp sqlserver 執(zhí)行存儲過程返回記錄集報(bào)對象關(guān)閉時(shí)不允許操作
asp sqlserver 執(zhí)行存儲過程返回記錄集報(bào)對象關(guān)閉時(shí)不允許操作的臨時(shí)解決方法。大家有更好的方法,可以說下。2009-08-08