recordset對象相當簡單,熟悉Asp的都能上手操作,這裏簡單做個實例:
Mssql 中建立存儲過程SP_UserList :
CREATE PROCEDURE SP_UserList
@Uid int
AS
select * from Users where Uid = @Uid
return
GO
在SQL Server中執行存儲過程:
declare @Uid int
execute SP_UserList 1
使用recordset對象調用:
Uid = 1
set rs=server.createobject("adodb.recordset")
sql = "exec SP_UserList "&Uid&""
rs.open sql,conn,1,1
或者:
Uid = 1 '存儲過程的輸入參數,為簡化程序, 直接設置該值
sql = "SP_UserList "&Uid&""
Set rs = Conn.Execute(sql) '或者Set rs = Conn.Execute("exec SP_UserList "&Uid&"")
如果改用command對象來調用存儲過程,則必須先加載adovbs.inc文件(文件adovbs.inc可在C:\Program Files\Common Files\System\ADO下找到):
<!--必須加載adovbs.inc文件,否則將出錯-->
<!--#include file="adovbs.inc"-->
'-----建立Connection對象----------
set Conn = Server.CreateObject("Adodb.connection")
Conn.Open "driver={sql server};server=localhost;uid=sa;pwd=;database=Mydbase;"
Uid = 1
'-----建立Command對象-----------
set Comm = server.createobject("adodb.command")
Comm.ActiveConnection = Conn
Comm.CommandText = "SP_UserList" '存儲過程名稱,指定要執行的是壹個存儲過程
Comm.CommandType = 4 'adCmdStoredProc = 4 ,其為Stored Procedure
'-----準備 Stored Procedure 的參數-------
Comm.Parameters.Append Comm.CreateParameter("@Uid",adInteger,adParamInput,4,Uid) '命令格式Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
'-----或者使用下列的方法定義 Stored Procedure 的參數:先創建輸入參數對象,然後把參數加到參數集合-------
'Set CommFirstParam = Comm.CreateParameter("@Uid",adInteger,adParamInput,4,Uid) '創建輸入參數對象
'Comm.Parameters.Append CommFirstParam '把參數加到參數集合
'-----執行存儲過程----------------------
Comm.Execute
'-----下面輸出參數結果----------------------
response.write Comm.Parameters("@Uid")
最後關閉command對象:Set Comm = Nothing。如果準備 Stored Procedure 的參數中采用的是創建輸入參數對象的方法,則在最後還必須關閉對象:Set CommFirstParam = Nothing
再次提示壹下,在使用command調對存儲過程時,必須預先使用include加載adovbs.inc文件,否則肯定出錯!!
下列是對Command對象中使用的各屬性的描述。
1、ActiveConnection 屬性:指示指定的 Command 或 Recordset 對象當前所屬的 Connection 對象。
2、CommandText 屬性:包含要根據提供者發送的命令的文本。設置或返回包含提供者命令(如 SOL 語句、表格名稱或存儲的過程調用)的字符串值。默認值為 ""(零長度字符串)。
3、CommandType 屬性:指示 Command 對象的類型。
設置和返回值:
AdCmdText:將 CommandText 作為命令或存儲過程調用的文本化定義進行計算。
AdCmdTable:將 CommandText 作為其列全部由內部生成的 SQL 查詢返回的表格的名稱進行計算。
AdCmdTableDirect:將 CommandText 作為其列全部返回的表格的名稱進行計算。
AdCmdStoredProc:將 CommandText 作為存儲過程名進行計算。
AdCmdUnknown:默認值。CommandText 屬性中的命令類型未知。
adCmdFile:將 CommandText 作為持久 Recordset 文件名進行計算。
AdExecuteNoRecords:指示 CommandText 為不返回行的命令或存儲過程(例如,插入數據的命令)。如果檢索任意行,則將丟棄這些行且並不返回。它總是與 adCmdText 或 adCmdStoredProc 進行組合。
4、CreateParameter 屬性:使用指定屬性創建新的 Parameter 對象。返回 Parameter 對象。
語法:Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
參數描述:
Name:可選,字符串,代表 Parameter 對象名稱。
Type: 可選,長整型值,指定 Parameter 對象數據類型。關於有效設置請參見 Type 屬性。
Direction:可選,長整型值,指定 Parameter 對象類型。關於有效設置請參見 Direction 屬性。
Size:可選,長整型值,指定參數值最大長度(以字符或字節數為單位)。
Value: 可選,變體型,指定 Parameter 對象的值。
在上例使用Command對象時,在“準備 Stored Procedure 的參數”中,我們還可以這樣實現:
Comm.Parameters.Append Comm.CreateParameter("Uid",adInteger,adParamInput,4)
Comm("Uid")=1
這樣我們在使用存儲過程(Stored Procedure) 參數的時候,就可以使用三種方法來實現了。
在ASP中使用存儲過程使用到的各個屬性我們就簡單介紹到這裏。在存儲過程使用過程中,除了可傳遞輸入參數外,還可以使用返回碼和輸出參數返回值,由於篇幅關系,筆者不再舉例,有興趣可去參考VB6.0的MSDN文檔中有關ADO的部分和SQL Server 2000的幫助文檔。
附:存儲過程的書寫格式
[Copy to clipboard] [ - ]CODE:
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS
程序行