欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)過我親身實踐的。各位看官批判地接受吧。

相關文章

最新評論