ASP調用帶參數存儲過程的幾種方式
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
最近有很多的朋友問到調用存儲過程的問題,這里簡單介紹幾種ASP調用帶參數存儲過程的方法。 1 這也是最簡單的方法,兩個輸入參數,無返回值: 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的函數返回值那樣;另一種是可以返回多個值,存 儲這些值的變量名稱需要在調用參數中先行指定。 這個例子要處理多種參數,輸入參數,輸出參數,返回記錄集以及一個直接返回值(夠全了吧?) 存儲過程如下: use pubs GO -- 建立存儲過程 create procedure sp_PubsTest -- 定義三個參數變量,注意第三個,特別標記是用于輸出 @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 調用該存儲過程的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 中是預定義常量,可以直接調用,但在 VBScript 中沒有預定義 adCmdSPStoredProc = 4 adParamReturnValue = 4 adParaminput = 1 adParamOutput = 2 adInteger = 3 adVarChar = 200 iVal = 5 oVal = 3 '建一個command對象 set CmdSP = Server.CreateObject("ADODB.Command") '建立連結 CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs" '定義command 對象調用名稱 CmdSP.CommandText = "sp_PubsTest" '設置command調用類型是存儲過程 (adCmdSPStoredProc = 4) CmdSP.CommandType = adCmdSPStoredProc '往command 對象中加參數 '定義存儲過程有直接返回值,并且是個整數,省缺值是4 CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4) '定義一個字符型輸入參數 CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M") '定義一個整型輸入參數 CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal) '定義一個整型輸出參數 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調用數據庫存儲過程
<%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) '創建輸入參數對象 cmdTemp.Parameters.Append tmpParam rst.Open cmdTemp, , 1, 3 '生成查詢結果 %> 這里調用的存儲過程為pd_test,這種是ADO中提供的標準方法,但存在一個問題,就是當在存儲過程中有兩個以上的SELECT語句,但從邏輯上又不可能同時執行的時候,ADO會提示你存儲過程中SELECT語句太多,解決方法是直接用ADO的CONNECTION對象的EXECUTE方法直接執行存儲過程,如下: <% 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 編輯過 |
關鍵字查詢
相關文章
正在查詢... |