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ù)變量,注意第三個,特別標記是用于輸出 @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)用sql server的存儲過程可以加快程序運行速度 1.調(diào)用存儲過程的一般方法 先假設(shè)在sql server中有一存儲過程dt_users: CREATE PROCEDURE [dbo].[dt_users] AS select * from users return GO 第一種方法是不利用command對象,直接用recordset對象 set rs=server.createobject("adodb.recordset") sql="exec dt_users" rs.open sql,conn,1,1 這樣就可 第二種方法是利用command對象 set comm=server.createobject("adodb.command") comm.commantype=4 set comm.activeconnection=conn comm.commandtext="dbo.dt_users" set rs=server.createobject("adodb.recordset") rs.open comm,,1,1 2.給存儲過程傳遞參數(shù) 如果存儲過程中不用參數(shù),而是單一的sql語句,還顯示不出調(diào)用存儲過程的優(yōu)勢! 比如說一bbs的查詢,可以按作者和主題查詢!則可以建立存儲過程如下: 參數(shù)keyword為關(guān)鍵字,choose是選擇查詢的方法。 CREATE PROCEDURE [dbo].[dt_bbs] @keyword varchar(20)=null, @choose int=null as if @choose=1 select * from bbs where name like @keyword else select * from bbs where subject like @keyword return go 這樣我們調(diào)用存儲過程時只需將參數(shù)傳遞過去就行了,而省去在asp中來寫一段程序 用第一種方法: set rs=server.createobject("adodb.recordset") sql="exec dt_bbs ''"&keyword&"'',"&choose&"" rs.open sql,conn,1,1 用第二種方法: set comm=server.createobject("adodb.command") comm.commantype=4 comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword) comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose) set comm.activeconnection=conn comm.commandtext="dbo.dt_bbs" set rs=server.createobject("adodb.recordset") rs.CursorType=3 rs.open comm,,1,1 |
聯(lián)系客服