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

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

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

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

'**調(diào)用帶有輸入輸出參數(shù)的存儲(chǔ)過程**  
DIM MyComm,UserID,UserName  
UserID = 1  
Set MyComm = Server.CreateObject("ADODB.Command")  
MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串  
MyComm.CommandText = "getUserName" '指定存儲(chǔ)過程名  
MyComm.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程  
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ù)時(shí)需要5個(gè)參數(shù),聲明輸出參數(shù)時(shí)需要4個(gè)參數(shù)。聲明輸入?yún)?shù)時(shí)5個(gè)參數(shù)分別為:參數(shù)名、參數(shù)數(shù)據(jù)類型、參數(shù)類型、數(shù)據(jù)長度、參數(shù)值。聲明輸出參數(shù)時(shí),沒有最后一個(gè)參數(shù):參數(shù)值。 

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

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

復(fù)制代碼 代碼如下:

'**調(diào)用帶有輸入輸出參數(shù)的存儲(chǔ)過程(簡化代碼)**  
DIM MyComm,UserID,UserName  
UserID = 1  
Set MyComm = Server.CreateObject("ADODB.Command")  
with MyComm  
.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串  
.CommandText = "getUserName" '指定存儲(chǔ)過程名  
.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程  
.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位用戶的用戶名,是不是要?jiǎng)?chuàng)建10次Command對(duì)象呢?不是的。如果需要多次調(diào)用同一存儲(chǔ)過程,只需改變輸入?yún)?shù),就會(huì)得到不同的輸出: 

復(fù)制代碼 代碼如下:

'**多次調(diào)用同一存儲(chǔ)過程**  
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" '指定存儲(chǔ)過程名  
  .CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程  
  .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í)參數(shù)值不發(fā)生變化的入?yún)⒁约俺鰠⒉槐刂匦侣暶?  
  .Parameters("@UserID") = UserID  
   .Execute  
  end if  
 end with  
 UserName = UserName + MyComm(1) + "," '也許你喜歡用數(shù)組存儲(chǔ)  
next  
Set MyComm = Nothing  

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

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

/*SP5*/  
CREATE PROCEDURE dbo.getUserName  
--為了加深對(duì)"順序"的印象,將以下兩參數(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)文章

最新評(píng)論