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)用sql server的存儲(chǔ)過(guò)程可以加快程序運(yùn)行速度
1.調(diào)用存儲(chǔ)過(guò)程的一般方法 先假設(shè)在sql server中有一存儲(chǔ)過(guò)程dt_users: CREATE PROCEDURE [dbo].[dt_users] AS select * from users return GO 第一種方法是不利用command對(duì)象,,直接用recordset對(duì)象 set rs=server.createobject("adodb.recordset") sql="exec dt_users" rs.open sql,conn,1,1 這樣就可 第二種方法是利用command對(duì)象 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.給存儲(chǔ)過(guò)程傳遞參數(shù) 如果存儲(chǔ)過(guò)程中不用參數(shù),而是單一的sql語(yǔ)句,,還顯示不出調(diào)用存儲(chǔ)過(guò)程的優(yōu)勢(shì),! 比如說(shuō)一bbs的查詢,可以按作者和主題查詢,!則可以建立存儲(chǔ)過(guò)程如下: 參數(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)用存儲(chǔ)過(guò)程時(shí)只需將參數(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
|