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

ASP下存儲過程編寫入門全接觸第3/5頁

 更新時間:2007年10月23日 20:32:55   作者:  

調(diào)用該存儲過程的ASP代碼如下: 
復制代碼 代碼如下:

'**調(diào)用帶有輸入輸出參數(shù)的存儲過程**  
DIM MyComm,UserID,UserName  
UserID = 1  
Set MyComm = Server.CreateObject("ADODB.Command")  
MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串  
MyComm.CommandText = "getUserName" '指定存儲過程名  
MyComm.CommandType = 4 '表明這是一個存儲過程  
MyComm.Prepared = true '要求將SQL命令先行編譯  
'聲明參數(shù)  
MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)  
MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)  
MyComm.Execute  
'取得出參 
UserName = MyComm(1)  
Set MyComm = Nothing  

  在以上代碼中,可以看到,與聲明返回值不同,聲明輸入?yún)?shù)時需要5個參數(shù),聲明輸出參數(shù)時需要4個參數(shù)。聲明輸入?yún)?shù)時5個參數(shù)分別為:參數(shù)名、參數(shù)數(shù)據(jù)類型、參數(shù)類型、數(shù)據(jù)長度、參數(shù)值。聲明輸出參數(shù)時,沒有最后一個參數(shù):參數(shù)值。 

  需要特別注意的是:在聲明參數(shù)時,順序一定要與存儲過程中定義的順序相同,而且各參數(shù)的數(shù)據(jù)類型、長度也要與存儲過程中定義的相同。 

  如果存儲過程有多個參數(shù),ASP代碼會顯得繁瑣,可以使用with命令簡化代碼: 

復制代碼 代碼如下:

'**調(diào)用帶有輸入輸出參數(shù)的存儲過程(簡化代碼)**  
DIM MyComm,UserID,UserName  
UserID = 1  
Set MyComm = Server.CreateObject("ADODB.Command")  
with MyComm  
.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串  
.CommandText = "getUserName" '指定存儲過程名  
.CommandType = 4 '表明這是一個存儲過程  
.Prepared = true '要求將SQL命令先行編譯  
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)  
.Parameters.append .CreateParameter("@UserName",200,2,40)  
.Execute  
end with  
UserName = MyComm(1)  
Set MyComm = Nothing  

  假如我們要取得ID為1到10,10位用戶的用戶名,是不是要創(chuàng)建10次Command對象呢?不是的。如果需要多次調(diào)用同一存儲過程,只需改變輸入?yún)?shù),就會得到不同的輸出: 

復制代碼 代碼如下:

'**多次調(diào)用同一存儲過程**  
DIM MyComm,UserID,UserName  
UserName = ""  
Set MyComm = Server.CreateObject("ADODB.Command")  
for UserID = 1 to 10  
 with MyComm  
  .ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串  
  .CommandText = "getUserName" '指定存儲過程名  
  .CommandType = 4 '表明這是一個存儲過程  
  .Prepared = true '要求將SQL命令先行編譯  
  if UserID = 1 then  
   .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)  
   .Parameters.append .CreateParameter("@UserName",200,2,40)  
   .Execute  
  else  
   '重新給入?yún)①x值(此時參數(shù)值不發(fā)生變化的入?yún)⒁约俺鰠⒉槐刂匦侣暶?  
  .Parameters("@UserID") = UserID  
   .Execute  
  end if  
 end with  
 UserName = UserName + MyComm(1) + "," '也許你喜歡用數(shù)組存儲  
next  
Set MyComm = Nothing  

  通過以上代碼可以看出:重復調(diào)用同一存儲過程時,只需為值發(fā)生改變的輸入?yún)?shù)重新賦值即可,這一方法在有多個輸入輸出參數(shù),且每次調(diào)用時只有一個輸入?yún)?shù)的值發(fā)生變化時,可以大大減少代碼量。 
5. 同時具有返回值、輸入?yún)?shù)、輸出參數(shù)的存儲過程 
  前面說過,在調(diào)用存儲過程時,聲明參數(shù)的順序要與存儲過程中定義的順序相同。還有一點要特別注意:如果存儲過程同時具有返回值以及輸入、輸出參數(shù),返回值要最先聲明。 

  為了演示這種情況下的調(diào)用方法,我們改善一下上面的例子。還是取得ID為1的用戶的用戶名,但是有可能該用戶不存在(該用戶已刪除,而userid是自增長的字段)。存儲過程根據(jù)用戶存在與否,返回不同的值。此時,存儲過程和ASP代碼如下: 
復制代碼 代碼如下:

/*SP5*/  
CREATE PROCEDURE dbo.getUserName  
--為了加深對"順序"的印象,將以下兩參數(shù)的定義順序顛倒一下  
@UserName varchar(40) output,  
@UserID int  
as  
set nocount on  
begin  
if @UserID is null return  
select @UserName=username  
from dbo.[userinfo]  
where userid=@UserID  
if rowcount> 0  
return 1  
else  
return 0  
return  
end  
go 

相關(guān)文章

最新評論