ASP下存儲過程編寫入門全接觸第4/5頁
更新時間:2007年10月23日 20:32:55 作者:
復制代碼 代碼如下:
'**調用同時具有返回值、輸入參數、輸出參數的存儲過程**
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("RETURN",2,4)
'以下兩參數的聲明順序也做相應顛倒
.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
有時候,我們需要存儲過程同時返回參數和記錄集,比如在利用存儲過程分頁時,要同時返回記錄集以及數據總量等參數。以下給出一個進行分頁處理的存儲過程:
/*SP6*/
CREATE PROCEDURE dbo.getUserList
@iPageCount int OUTPUT, --總頁數
@iPage int, --當前頁號
@iPageSize int --每頁記錄數
as
set nocount on
begin
--創(chuàng)建臨時表
create table #t (ID int IDENTITY, --自增字段
userid int,
username varchar(40))
--向臨時表中寫入數據
insert into #t
select userid,username from dbo.[UserInfo]
order by userid
--取得記錄總數
declare @iRecordCount int
set @iRecordCount = rowcount
--確定總頁數
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
ELSE
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--若請求的頁號大于總頁數,則顯示最后一頁
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
--確定當前頁的始末記錄
DECLARE @iStart int --start record
DECLARE @iEnd int --end record
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
--取當前頁記錄
select * from #t where ID> @iStart and ID <@iEnd
--刪除臨時表
DROP TABLE #t
--返回記錄總數
return @iRecordCount
end
go
在上面的存儲過程中,輸入當前頁號及每頁記錄數,返回當前頁的記錄集,總頁數及記錄總數。為了更具典型性,將記錄總數以返回值的形式返回。以下是調用該存儲過程的ASP代碼(具體的分頁操作略去):
'**調用分頁存儲過程**
DIM pagenow,pagesize,pagecount,recordcount
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
對于以上代碼,只有一點需要說明:同時返回記錄集和參數時,若要取得參數,需先將記錄集關閉,使用記錄集時再將其打開。
相關文章
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關閉時不允許操作
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關閉時不允許操作的臨時解決方法。大家有更好的方法,可以說下。2009-08-08