在asp中调用存储过程的几种方法

上一篇 / 下一篇  2008-07-01 22:30:00

1 这也是最简单的方法,两个输入参数,无返回值:51Testing软件测试网$P(hF G+RWUC^
set connection = server.createobject("adodb.connection")51Testing软件测试网L&s8]$JST y
connection.open someDSN51Testing软件测试网c7oAN4\g]p
Connection.Execute "procname varvalue1, varvalue2"

'将所有对象清为nothing,释放资源51Testing软件测试网"U"NJntq Fw
connection.close51Testing软件测试网~dHAt*oa9g&X
set connection = nothing

51Testing软件测试网 _R)H$p ^Z i
2 如果要返回 Recordset 集:51Testing软件测试网-R-vB7s!k#vf
set connection = server.createobject("adodb.connection")51Testing软件测试网 MG bk;`:^
connection.open someDSN
aWIl;G#ll65703set rs = server.createobject("adodb.recordset")
'{+z-ul4U,k*[/C6U65703rs.Open "Exec procname varvalue1, varvalue2",connection

'将所有对象清为nothing,释放资源51Testing软件测试网1y$C;L3~7syI z`-h$k Y
rs.close51Testing软件测试网#E3R@C1n+W;]-U
connection.close51Testing软件测试网\](`#M W4|MwJ-J
set rs = nothing
MV@d9kz65703set connection = nothing

51Testing软件测试网 SG$|aBC:T5Ru,r
3 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。51Testing软件测试网#fy^,J+i
首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。
F(b/rwz8kWuG)r65703这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)51Testing软件测试网4Zn9u{6K.X eB
存储过程如下:

use pubs51Testing软件测试网7ASJJw}
GO

-- 建立存储过程
dS}%IL4BHTf65703create procedure sp_PubsTest

-- 定义三个参数变量,注意第三个,特别标记是用于输出
^C"b6d#I4V~P65703@au_lname varchar (20),51Testing软件测试网8{o_t-zB&Z
@intID int,
,Z |ox(B"f0Qo'w7I3|65703@intIDOut int OUTPUT

AS

SELECT @intIDOut = @intID + 1

SELECT *51Testing软件测试网/Go @$Qr7~
FROM authors51Testing软件测试网V\Kb-\JP[J-WU
WHERE au_lname LIKE @au_lname + '%'

--直接返回一个值51Testing软件测试网8Gw8O:|ST];b:Q T
RETURN @intID + 2

51Testing软件测试网8W0E:eR^D8qhB^
调用该存储过程的asp程序如下:

<%@ Language=VBscrīpt %>
%ml8y@^%[c!U J65703<%51Testing软件测试网,{!`3bz+oh
Dim CmdSP
s Y:H~5E7`+o65703Dim adoRS51Testing软件测试网5Z vpRJZ6rP
Dim adCmdSPStoredProc51Testing软件测试网k| Ql2Ugq.K8vE#k
Dim adParamReturnValue51Testing软件测试网:I SY8M?({+c7A
Dim adParaminput51Testing软件测试网]!T/B+u#} x'b)CD A~
Dim adParamOutput
0b)agr Ok j,F65703Dim adInteger51Testing软件测试网w(]$^b$U
Dim iVal
fl$zj!u%v3|X65703Dim oVal
0Y0V0?8F7J/U$aU65703Dim adoField
3Q~7qr E(~ T l65703Dim adVarChar

‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBscrīpt 中没有预定义
~"c!x4DN"}G%H(p65703adCmdSPStoredProc = 451Testing软件测试网,X9\n g:m7pJ+O6G b5W3L
adParamReturnValue = 451Testing软件测试网 C!ihHCp
adParaminput = 151Testing软件测试网8U;t/lZ6~N1w)hjw
adParamOutput = 251Testing软件测试网9mecq[!F
adInteger = 351Testing软件测试网hw}uZ"\X9}fk
adVarChar = 200

iVal = 551Testing软件测试网-L,h(bIp:eJi
oVal = 3

'建一个command对象51Testing软件测试网5c$CS&BE,j ` rd
set CmdSP = Server.CreateObject("ADODB.Command")

'建立连结51Testing软件测试网8|:z:u lKQ ?
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"

'定义command 对象调用名称51Testing软件测试网 va B+z2V J VG7D0{
CmdSP.CommandText = "sp_PubsTest"

'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)51Testing软件测试网 Qxkn+o,[iO
CmdSP.CommandType = adCmdSPStoredProc

'往command 对象中加参数
$c#`o'O,u3Yw65703'定义存储过程有直接返回值,并且是个整数,省缺值是4
bjo;EOo&W65703CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
0D{0h!V~0f!LR65703'定义一个字符型输入参数51Testing软件测试网-b AZN]:|u4J
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
[5vWB:Y#@&]%S"E.j|65703'定义一个整型输入参数51Testing软件测试网/ctuz:q[RN$i)y{0[/m
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
+U7`crP+Eb65703'定义一个整型输出参数51Testing软件测试网"P$j0Pg \!\*hc
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)

'运行存储过程,并得到返回记录集51Testing软件测试网bKw x~ ?:YU
Set adoRS = CmdSP.Execute

51Testing软件测试网$py,\-u&Q
'把每个记录打印出来,其中的字段是虚拟的,可以不用管51Testing软件测试网[5CXKT,xaD
While Not adoRS.EOF

for each adoField in adoRS.Fields51Testing软件测试网v%g Yd FRJ)a gJE
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF51Testing软件测试网 @w!Zv.NCTr}
Next51Testing软件测试网 Ky;y'?'O
Response.Write "<br>"51Testing软件测试网)b/y{v"I A)|`
adoRS.MoveNext51Testing软件测试网6os0m]-z7M P$gz
Wend

'打印两个输出值:51Testing软件测试网S'ruN+A Y
Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"51Testing软件测试网{w@@s4D9|L ~
Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"


%GI$gQ4t65703'大扫除51Testing软件测试网H0|6c uPIve
Set adoRS = nothing
"j-yKYv`{Cd.]f65703Set CmdSP.ActiveConnection = nothing
lFLdR*Y7H65703Set CmdSP = nothing51Testing软件测试网 l'ou C2tz0WU!_
%>


TAG:

 

评分:0

我来说两句

日历

« 2023-03-27  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 4847
  • 日志数: 12
  • 建立时间: 2008-05-16
  • 更新时间: 2009-04-14

RSS订阅

Open Toolbar