返回多個記錄集的預存程序-ASP調用預存程序

來源:互聯網
上載者:User
預存程序|記錄集  本文最先介紹的是返回記錄集的預存程序。有時候,需要一個預存程序返回多個記錄集,在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方法,取得了預存程序返回的多個記錄集。

  至此,針對ASP調用預存程序的各種情況,本文已做了較為全面的說明。最後說一下在一個ASP程式中,調用多個預存程序的不同方法。

  在一個ASP程式中,調用多個預存程序至少有以下三種方法是可行的:

  1. 建立多個Command對象

DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調用預存程序一
......
Set MyComm = Nothing
Set MyComm = Server.CreateObject("ADODB.Command")
'調用預存程序二
......
Set MyComm = Nothing
......


  2. 只建立一個Command對象,結束一次調用時,清除其參數

DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調用預存程序一
.....
'清除參數(假設有三個參數)
MyComm.Parameters.delete 2
MyComm.Parameters.delete 1
MyComm.Parameters.delete 0
'調用預存程序二並清除參數
......
Set MyComm = Nothing


  此時要注意:清除參數的順序與參數聲明的順序相反,原因嘛,我也不知道。

  3. 利用Parameters資料集合的Refresh方法重設Parameter對象

DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'調用預存程序一
.....
'重設Parameters資料集合中包含的所有Parameter對象
MyComm.Parameters.Refresh
'調用預存程序二
.....
Set MyComm = Nothing


  一般認為,重複建立對象是效率較低的一種方法,但是經測試(測試載入器為Microsoft Application Center Test),結果出人意料:

  方法2 >= 方法1 >> 方法3

  方法2的運行速度大於等於方法1(最多可高4%左右),這兩種方法的運行速度遠大於方法3(最多竟高達130%),所以建議在參數多時,採用方法1,在參數較少時,採用方法2。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。