ASP下存儲過程編寫入門全接觸第5/5頁
更新時間:2007年10月23日 20:32:55 作者:
7. 返回多個記錄集的存儲過程
本文最先介紹的是返回記錄集的存儲過程。有時候,需要一個存儲過程返回多個記錄集,在ASP中,如何同時取得這些記錄集呢?為了說明這一問題,在userinfo表中增加兩個字段:usertel及usermail,并設定只有登錄用戶可以查看這兩項內(nèi)容。
/*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代碼:
'**調(diào)用返回多個記錄集的存儲過程**
DIM checklg,UserID,UserName,UserTel,UserMail
DIM MyComm,MyRst
UserID = 1
'checklogin()為自定義函數(shù),判斷訪問者是否登錄
checklg = checklogin()
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串
.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調(diào)用存儲過程的各種情況,本文已做了較為全面的說明。最后說一下在一個ASP程序中,調(diào)用多個存儲過程的不同方法。
在一個ASP程序中,調(diào)用多個存儲過程至少有以下三種方法是可行的:
1. 創(chuàng)建多個Command對象
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調(diào)用存儲過程一
......
Set MyComm = Nothing
Set MyComm = Server.CreateObject("ADODB.Command")
'調(diào)用存儲過程二
......
Set MyComm = Nothing
......
2. 只創(chuàng)建一個Command對象,結(jié)束一次調(diào)用時,清除其參數(shù)
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調(diào)用存儲過程一
.....
'清除參數(shù)(假設有三個參數(shù))
MyComm.Parameters.delete 2
MyComm.Parameters.delete 1
MyComm.Parameters.delete 0
'調(diào)用存儲過程二并清除參數(shù)
......
Set MyComm = Nothing
此時要注意:清除參數(shù)的順序與參數(shù)聲明的順序相反,原因嘛,我也不知道。
3. 利用Parameters數(shù)據(jù)集合的Refresh方法重置Parameter對象
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調(diào)用存儲過程一
.....
'重置Parameters數(shù)據(jù)集合中包含的所有Parameter對象
MyComm.Parameters.Refresh
'調(diào)用存儲過程二
.....
Set MyComm = Nothing
一般認為,重復創(chuàng)建對象是效率較低的一種方法,但是經(jīng)測試(測試工具為Microsoft Application Center Test),結(jié)果出人意料:
方法2 > = 方法1 > > 方法3
方法2的運行速度大于等于方法1(最多可高4%左右),這兩種方法的運行速度遠大于方法3(最多竟高達130%),所以建議在參數(shù)多時,采用方法1,在參數(shù)較少時,采用方法2。
花了一天的時間,終于把我對于在ASP中調(diào)用存儲過程的一些粗淺的經(jīng)驗形成了文字。這其中,有些是我只知其果而不明其因的,有些可能是錯誤的,但是,這些都是經(jīng)過我親身實踐的。各位看官批判地接受吧。
相關文章
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關閉時不允許操作
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關閉時不允許操作的臨時解決方法。大家有更好的方法,可以說下。2009-08-08