| 1. 這也是最簡(jiǎn)單的方法,兩個(gè)輸入參數,無(wú)返回值: 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的方法。 首先說(shuō)明,返回值有兩種。一種是在存儲過(guò)程中直接return一個(gè)值,就象C和VB的函數返回值那樣;另一種是可以返回多個(gè)值,存 儲這些值的變量名稱(chēng)需要在調用參數中先行指定。 這個(gè)例子要處理多種參數,輸入參數,輸出參數,返回記錄集以及一個(gè)直接返回值(夠全了吧?) 存儲過(guò)程如下: use pubs GO -- 建立存儲過(guò)程 create procedure sp_PubsTest -- 定義三個(gè)參數變量,注意第三個(gè),特別標記是用于輸出 @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 調用該存儲過(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 中是預定義常量,可以直接調用,但在 VBScript 中沒(méi)有預定義 adCmdSPStoredProc = 4 adParamReturnValue = 4 adParaminput = 1 adParamOutput = 2 adInteger = 3 adVarChar = 200 iVal = 5 oVal = 3 ''建一個(gè)command對象 set CmdSP = Server.CreateObject("ADODB.Command") ''建立連結 CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs" ''定義command 對象調用名稱(chēng) CmdSP.CommandText = "sp_PubsTest" ''設置command調用類(lèi)型是存儲過(guò)程 (adCmdSPStoredProc = 4) CmdSP.CommandType = adCmdSPStoredProc ''往command 對象中加參數 ''定義存儲過(guò)程有直接返回值,并且是個(gè)整數,省缺值是4 CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4) ''定義一個(gè)字符型輸入參數 CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M") ''定義一個(gè)整型輸入參數 CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal) ''定義一個(gè)整型輸出參數 CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal) ''運行存儲過(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中調用sql server的存儲過(guò)程可以加快程序運行速度 1.調用存儲過(guò)程的一般方法 先假設在sql server中有一存儲過(guò)程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.給存儲過(guò)程傳遞參數 如果存儲過(guò)程中不用參數,而是單一的sql語(yǔ)句,還顯示不出調用存儲過(guò)程的優(yōu)勢! 比如說(shuō)一bbs的查詢(xún),可以按作者和主題查詢(xún)!則可以建立存儲過(guò)程如下: 參數keyword為關(guān)鍵字,choose是選擇查詢(xún)的方法。 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 這樣我們調用存儲過(guò)程時(shí)只需將參數傳遞過(guò)去就行了,而省去在asp中來(lái)寫(xiě)一段程序 用第一種方法: 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)系客服