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