ASP調(diào)用帶參數(shù)存儲過程的幾種方式
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
最近有很多的朋友問到調(diào)用存儲過程的問題,這里簡單介紹幾種ASP調(diào)用帶參數(shù)存儲過程的方法。 1 這也是最簡單的方法,兩個輸入?yún)?shù),無返回值: set connection = server.createobject("adodb.connection") connection.open someDSN Connection.Execute "procname varvalue1, varvalue2" '將所有對象清為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 '將所有對象清為nothing,釋放資源 rs.close connection.close set rs = nothing set connection = nothing 3 以上兩種方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。 首先說明,返回值有兩種。一種是在存儲過程中直接return一個值,就象C和VB的函數(shù)返回值那樣;另一種是可以返回多個值,存 儲這些值的變量名稱需要在調(diào)用參數(shù)中先行指定。 這個例子要處理多種參數(shù),輸入?yún)?shù),輸出參數(shù),返回記錄集以及一個直接返回值(夠全了吧?) 存儲過程如下: use pubs GO -- 建立存儲過程 create procedure sp_PubsTest -- 定義三個參數(shù)變量,注意第三個,特別標(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 + '%' --直接返回一個值 RETURN @intID + 2 調(diào)用該存儲過程的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 中沒有預(yù)定義 adCmdSPStoredProc = 4 adParamReturnValue = 4 adParaminput = 1 adParamOutput = 2 adInteger = 3 adVarChar = 200 iVal = 5 oVal = 3 '建一個command對象 set CmdSP = Server.CreateObject("ADODB.Command") '建立連結(jié) CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs" '定義command 對象調(diào)用名稱 CmdSP.CommandText = "sp_PubsTest" '設(shè)置command調(diào)用類型是存儲過程 (adCmdSPStoredProc = 4) CmdSP.CommandType = adCmdSPStoredProc '往command 對象中加參數(shù) '定義存儲過程有直接返回值,并且是個整數(shù),省缺值是4 CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4) '定義一個字符型輸入?yún)?shù) CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M") '定義一個整型輸入?yún)?shù) CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal) '定義一個整型輸出參數(shù) CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal) '運行存儲過程,并得到返回記錄集 Set adoRS = CmdSP.Execute '把每個記錄打印出來,其中的字段是虛擬的,可以不用管 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 '打印兩個輸出值: 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ù)庫存儲過程
<%Set Dataconn = Server.CreateObject("ADODB.Connection") '建立連接對象 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") '建立命令對象 Set rst = Server.CreateObject("ADODB.Recordset") '建立記錄集對象 cmdTemp.CommandText = "dbo.pd_test" '存儲過程名稱 cmdTemp.CommandType = 4 '命令類別為4,表示為存儲過程 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ù)對象 cmdTemp.Parameters.Append tmpParam rst.Open cmdTemp, , 1, 3 '生成查詢結(jié)果 %> 這里調(diào)用的存儲過程為pd_test,這種是ADO中提供的標(biāo)準(zhǔn)方法,但存在一個問題,就是當(dāng)在存儲過程中有兩個以上的SELECT語句,但從邏輯上又不可能同時執(zhí)行的時候,ADO會提示你存儲過程中SELECT語句太多,解決方法是直接用ADO的CONNECTION對象的EXECUTE方法直接執(zhí)行存儲過程,如下: <% Set Dataconn = Server.CreateObject("ADODB.Connection") '建立連接對象 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) %> 該文章在 2011/2/16 10:51:11 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |