ASP下存儲過程編寫入門全接觸第3/5頁
更新時間:2007年10月23日 20:32:55 作者:
調(diào)用該存儲過程的ASP代碼如下:
復(fù)制代碼 代碼如下:
'**調(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命令簡化代碼:
復(fù)制代碼 代碼如下:
'**調(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ù),就會得到不同的輸出:
復(fù)制代碼 代碼如下:
'**多次調(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
通過以上代碼可以看出:重復(fù)調(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代碼如下:
復(fù)制代碼 代碼如下:
/*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)文章
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關(guān)閉時不允許操作
asp sqlserver 執(zhí)行存儲過程返回記錄集報對象關(guān)閉時不允許操作的臨時解決方法。大家有更好的方法,可以說下。2009-08-08

