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

上一篇 / 下一篇  2007-05-26 10:03:50 / 个人分类:ASP

1 这也是最简单的方法,两个输入参数,无返回值:51Testing软件测试网 D p.~+gX cT0m6B
set connection = server.createobject("adodb.connection")51Testing软件测试网6Eis&f5~+N$a
connection.open someDSN51Testing软件测试网K,Ru\ o1Fs)Z
Connection.Execute "procname varvalue1, varvalue2"

@:h V bQ @L0h&B0'将所有对象清为nothing,释放资源51Testing软件测试网-tuA:cJ eq
connection.close
tsr-]!g.} c Ds0set connection = nothing51Testing软件测试网r)yq|o]&s{

51Testing软件测试网 Hf UERI(c,Chb

51Testing软件测试网 X)e"y{vK
2 如果要返回 Recordset 集:51Testing软件测试网3x1`M"l"oNJ
set connection = server.createobject("adodb.connection")
m"[)Q1Z? U]8bTw0connection.open someDSN
#p[]&S3n?+{Y0set rs = server.createobject("adodb.recordset")
~Z[po~ h[G a-p0rs.Open "Exec procname varvalue1, varvalue2",connection

}^P KEO*gL0

B2K7DU$Y*BSQ0'将所有对象清为nothing,释放资源
bM#uLT6K%W9x0rs.close
(_q%hknq6I8l!U-Q0connection.close51Testing软件测试网$h J GH+m%J
set rs = nothing
2EcLR'Q ])[a'A0set connection = nothing51Testing软件测试网igWv8xIXw3Py$P;E

nlZ5IIK5U'y\"g#[0
C"z WMNa0@03 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。51Testing软件测试网6IXd _qc5`Z?A2?w
首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。51Testing软件测试网!K Jy:ZAatSS
这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)51Testing软件测试网r tS&`r3r
存储过程如下:51Testing软件测试网4U'wxb9HQhR]u0s.k

51Testing软件测试网9x1oT}S5l!X3z

use pubs
G6L ^9X T0GO

8I$F6q$L2D!nW5L/X9N051Testing软件测试网5E/fO@:?yGnP

-- 建立存储过程51Testing软件测试网qoRTc7om
create procedure sp_PubsTest

/Z\ ]%_)dx0

.`M X!Q$hM6U6t9B0-- 定义三个参数变量,注意第三个,特别标记是用于输出51Testing软件测试网 K(e\'j+d
@au_lname varchar (20),
%F u7GhU2lH-R(D~$L0@intID int,51Testing软件测试网i/Gs;vIU.}3Y.TBx[:k
@intIDOut int OUTPUT

I[P.D%`&]F0

*K&r!W9uw J;l*V W0AS51Testing软件测试网NT:r b SAPLn/k0O

51Testing软件测试网*F;eK%TUF

SELECT @intIDOut = @intID + 151Testing软件测试网'|e,t!F _y#X$H4oGw

tZ X$G'H)e0SELECT *51Testing软件测试网1f"kM*Y1oS
FROM authors51Testing软件测试网AP]A9W%W yJ*u1t
WHERE au_lname LIKE @au_lname + '%'51Testing软件测试网"M2B N+QnGJ{

jJ^ Wn:x9z0--直接返回一个值51Testing软件测试网c\"Ha?1^ o,i
RETURN @intID + 2

*A.nq m+N'U\+i]o051Testing软件测试网U1S_`0g


?3k[Pi9i t4G0调用该存储过程的asp程序如下:

/M5lI _~Skw4V0

#w;m0T:t/map0<%@ Language=VBscrīpt %>51Testing软件测试网A4wW/@:s)G.sjS
<%51Testing软件测试网4u3l2k!Lu9pI
Dim CmdSP51Testing软件测试网h R"b?v.|Q`
Dim adoRS
!w^Fo*~1[f"A&a9k0Dim adCmdSPStoredProc
)q]q4yV{ p-RQ0Dim adParamReturnValue
9EW6T{5XV\&n0Dim adParaminput51Testing软件测试网4ybkO$wOp&Kl
Dim adParamOutput
p*E6y&g|5pyC0Dim adInteger51Testing软件测试网[1k!I+WO!M#[
Dim iVal51Testing软件测试网 c7Nz O;Xa
Dim oVal
\S E4tK:ov'_0Dim adoField
s,P}Q/G#V0uu/P0Dim adVarChar51Testing软件测试网-H+n/J [ I)pP

51Testing软件测试网}5?jz/O-ye

‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBscrīpt 中没有预定义51Testing软件测试网J pu Cy]c
adCmdSPStoredProc = 451Testing软件测试网&W7v7gZ_ x)g8g;}Z0Y
adParamReturnValue = 451Testing软件测试网7D@WrJU
adParaminput = 1
$L#p$B$K\+G0adParamOutput = 251Testing软件测试网%Q GC(d K/v D8T{w$l
adInteger = 351Testing软件测试网({,sB t R ]b
adVarChar = 20051Testing软件测试网4J7o L0KOBp%R

51Testing软件测试网@5^(vHn

iVal = 551Testing软件测试网3Xo/|^,c"R
oVal = 3

i\0Q(a\:}'q051Testing软件测试网/g F&A$J3v X'H

'建一个command对象51Testing软件测试网6g{ i$F{ Rq
set CmdSP = Server.CreateObject("ADODB.Command")51Testing软件测试网 d!Z5@9X%n

51Testing软件测试网3C:v~#V `3zQ6bY

'建立连结
5i+@u|z,Ck{0CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"51Testing软件测试网o"KF|`BFt'n3n

51Testing软件测试网wk8TJj A4G

'定义command 对象调用名称51Testing软件测试网&V%]7@ \ PRu
CmdSP.CommandText = "sp_PubsTest"51Testing软件测试网vQ#?MC

JPW7]p0'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)51Testing软件测试网4} I4F8Mn q`.Ev$qo
CmdSP.CommandType = adCmdSPStoredProc

p?+}0Cw4va%Lk1q9b051Testing软件测试网8GBRl)c-L1ZN9x_

'往command 对象中加参数51Testing软件测试网(G3v$PZ @;r
'定义存储过程有直接返回值,并且是个整数,省缺值是4
.Y$uE:]j;y.Gw-H&h0CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
;{7I!vE%pV'C vF0'定义一个字符型输入参数51Testing软件测试网"@gwd~l8Y
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")51Testing软件测试网 z9f Av+zN)x1W
'定义一个整型输入参数51Testing软件测试网#CIn0|kr7m7bi
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
D:SH;i} Ki7{H0'定义一个整型输出参数51Testing软件测试网N Y}M-tp @&f
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)51Testing软件测试网al*E {w_2V^

51Testing软件测试网)g-U"uMy5J

'运行存储过程,并得到返回记录集51Testing软件测试网T\;RpH?
Set adoRS = CmdSP.Execute51Testing软件测试网7g-XN/GDoA

;Q.F er:d051Testing软件测试网-P:L X k4Y:O
'把每个记录打印出来,其中的字段是虚拟的,可以不用管
P8c$b kie t)L,?wq0While Not adoRS.EOF

I%F%}%V)^j/QTE Z0

!K*hz#}6^h0for each adoField in adoRS.Fields51Testing软件测试网q6_&YDZ
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Y0L?tYWL'g[)o4{0Next51Testing软件测试网_i/{*V![ xo0Q]6OP
Response.Write "<br>"
V+SCs#LD \D0adoRS.MoveNext
.{7T QP/xn1s3cT0Wend51Testing软件测试网 ^^+qtTKm

51Testing软件测试网;~Z2MjT

51Testing软件测试网'oyc0g-H B.[

51Testing软件测试网"oD+yB1H/_0Rn

'打印两个输出值:51Testing软件测试网NlJ%`w:O
Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"
0z{9o&WYyF0Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"51Testing软件测试网8ed G;a l#w8w

t$a\/vX X0
#J%\ WO-HH0W#\0'大扫除51Testing软件测试网p#W o]i0_i'q @H6|
Set adoRS = nothing51Testing软件测试网C d[F$A
Set CmdSP.ActiveConnection = nothing51Testing软件测试网wOL n!^4Hi7l c
Set CmdSP = nothing51Testing软件测试网Z&u LW5V x
%>51Testing软件测试网\m \!\,D,H4[P


TAG: ASP

 

评分:0

我来说两句

Open Toolbar