[點(diǎn)晴永久免費(fèi)OA]ASP調(diào)用帶參數(shù)存儲(chǔ)過(guò)程的幾種方式
最近有很多的朋友問(wèn)到調(diào)用存儲(chǔ)過(guò)程的問(wèn)題,這里簡(jiǎn)單介紹幾種ASP調(diào)用帶參數(shù)存儲(chǔ)過(guò)程的方法。
1、這也是最簡(jiǎn)單的方法,兩個(gè)輸入?yún)?shù),無(wú)返回值: set connection = server.createobject("adodb.connection") connection.open someDSN Connection.execute "procname varvalue1, varvalue2" '將所有對(duì)象清為nothing,釋放資源 connection.close set connection = nothing 2、如果要返回 Recordset 集: set connection = server.createobject("adodb.connection") connection.open someDSN set rs = server.createobject("adodb.recordset") rs.Open "exec procname varvalue1, varvalue2",connection '將所有對(duì)象清為nothing,釋放資源 rs.close connection.close set rs = nothing set connection = nothing 3、以上兩種方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。 首先說(shuō)明,返回值有兩種。一種是在存儲(chǔ)過(guò)程中直接return一個(gè)值,就象C和VB的函數(shù)返回值那樣;另一種是可以返回多個(gè)值,存 儲(chǔ)這些值的變量名稱需要在調(diào)用參數(shù)中先行指定。 這個(gè)例子要處理多種參數(shù),輸入?yún)?shù),輸出參數(shù),返回記錄集以及一個(gè)直接返回值(夠全了吧?) 存儲(chǔ)過(guò)程如下: use pubs GO -- 建立存儲(chǔ)過(guò)程 create procedure sp_PubsTest -- 定義三個(gè)參數(shù)變量,注意第三個(gè),特別標(biāo)記是用于輸出 @au_lname varchar (20), @intID int, @intIDOut int OUTPUT AS select @intIDOut = @intID + 1 select * from authors where au_lname LIKE @au_lname + '%' --直接返回一個(gè)值 RETURN @intID + 2 調(diào)用該存儲(chǔ)過(guò)程的asp程序如下: <%@ Language=VBscript %> <% Dim CmdSP Dim adoRS Dim adCmdSPStoredProc Dim adParamReturnValue Dim adParaminput Dim adParamOutput Dim adInteger Dim iVal Dim oVal Dim adoField Dim adVarChar '這些值在 VB 中是預(yù)定義常量,可以直接調(diào)用,但在 VBscript 中沒(méi)有預(yù)定義 adCmdSPStoredProc = 4 adParamReturnValue = 4 adParaminput = 1 adParamOutput = 2 adInteger = 3 adVarChar = 200 iVal = 5 oVal = 3 '建一個(gè)command對(duì)象 set CmdSP = Server.createObject("ADODB.Command") '建立連結(jié) CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs" '定義command 對(duì)象調(diào)用名稱 CmdSP.CommandText = "sp_PubsTest" '設(shè)置command調(diào)用類型是存儲(chǔ)過(guò)程 (adCmdSPStoredProc = 4) CmdSP.CommandType = adCmdSPStoredProc '往command 對(duì)象中加參數(shù) '定義存儲(chǔ)過(guò)程有直接返回值,并且是個(gè)整數(shù),省缺值是4 CmdSP.Parameters.Append CmdSP.createParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4) '定義一個(gè)字符型輸入?yún)?shù) CmdSP.Parameters.Append CmdSP.createParameter("@au_lname", adVarChar, adParaminput, 20, "M") '定義一個(gè)整型輸入?yún)?shù) CmdSP.Parameters.Append CmdSP.createParameter("@intID", adInteger, adParamInput, , iVal) '定義一個(gè)整型輸出參數(shù) CmdSP.Parameters.Append CmdSP.createParameter("@intIDOut", adInteger, adParamOutput, oVal) '運(yùn)行存儲(chǔ)過(guò)程,并得到返回記錄集 Set adoRS = CmdSP.execute '把每個(gè)記錄打印出來(lái),其中的字段是虛擬的,可以不用管 While Not adoRS.EOF for each adoField in adoRS.Fields Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF Next Response.Write "<br>" adoRS.MoveNext Wend '打印兩個(gè)輸出值: Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>" Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>" '大掃除 Set adoRS = nothing Set CmdSP.ActiveConnection = nothing Set CmdSP = nothing %> asp調(diào)用數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程 <%Set Dataconn = Server.createObject("ADODB.Connection") '建立連接對(duì)象 Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;APP=Microsoft(R) Developer Studio;WSID=APP_SERVER;Regional=Yes" Set cmdTemp = Server.createObject("ADODB.Command") '建立命令對(duì)象 Set rst = Server.createObject("ADODB.Recordset") '建立記錄集對(duì)象 cmdTemp.CommandText = "dbo.pd_test" '存儲(chǔ)過(guò)程名稱 cmdTemp.CommandType = 4 '命令類別為4,表示為存儲(chǔ)過(guò)程 Set cmdTemp.ActiveConnection = Dataconn Set tmpParam = cmdTemp.createParameter("Return Value", 3, 4, 4) cmdTemp.Parameters.Append tmpParam Set tmpParam = cmdTemp.createParameter("@BeginDate", 135, 1, 16, riqi) '創(chuàng)建輸入?yún)?shù)對(duì)象 cmdTemp.Parameters.Append tmpParam rst.Open cmdTemp, , 1, 3 '生成查詢結(jié)果 %> 這里調(diào)用的存儲(chǔ)過(guò)程為pd_test,這種是ADO中提供的標(biāo)準(zhǔn)方法,但存在一個(gè)問(wèn)題,就是當(dāng)在存儲(chǔ)過(guò)程中有兩個(gè)以上的select語(yǔ)句,但從邏輯上又不可能同時(shí)執(zhí)行的時(shí)候,ADO會(huì)提示你存儲(chǔ)過(guò)程中select語(yǔ)句太多,解決方法是直接用ADO的CONNECTION對(duì)象的execUTE方法直接執(zhí)行存儲(chǔ)過(guò)程,如下: <% Set Dataconn = Server.createObject("ADODB.Connection") '建立連接對(duì)象 Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;APP=Microsoft(R) Developer Studio;WSID=APP_SERVER;Regional=Yes" ss = "execUTE dbo.pd_test " & "'" & riqi1 & "'" Set rs = dataconn.execute(ss) %> 該文章在 2022/6/27 10:44:54 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |