Must know something of everything and everything of something!
ASP调用存储过程(转)
上一篇 /
下一篇 2007-05-11 12:05:21
/ 个人分类:DataBase
ASP调用存储过程
t3M1YtYqG3x0h9Eg Yr H"r3G5Q#rM01.调用存储过程的一般方法51Testing软件测试网+V3KBk]"D5G.F6D2x
先假设在sql server中有一存储过程dt_users:51Testing软件测试网9ha r"K#P
CREATE PROCEDURE [dbo].[dt_users]51Testing软件测试网cE.},Z*f._EM
AS
9C.tM\*vy^Z\0select * from users51Testing软件测试网"f+nbq V8hI
return51Testing软件测试网6JU^0T|0mmw%X
GO51Testing软件测试网+]]+I-llo-c
第一种方法是不利用command对象,直接用recordset对象
'p$aV
K3?0set rs=server.createobject("adodb.recordset")51Testing软件测试网+lq3B/Z
IJw:Lf,i
Nw
sql="exec dt_users"
:[,D#K![#]D0rs.open sql,conn,1,1 这样就可51Testing软件测试网K?
T1da.Vy
第二种方法是利用command对象
9o[)_hD*]0set comm=server.createobject("adodb.command")
t6\nIEg/h
G1h
i-U3d0comm.commantype=451Testing软件测试网"uG0\q4c3viuv
set comm.activeconnection=conn51Testing软件测试网$C7r7D#tD/e
comm.commandtext="dbo.dt_users"
B sG k3uS0set rs=server.createobject("adodb.recordset")
%V
B!V\7Zc0rs.open comm,,1,1
z GA}YE,LI-b02.给存储过程传递参数
J/~"{nWWX~
i0如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!51Testing软件测试网#J&rbB.C/EJt0L)@Q
比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:51Testing软件测试网$IH'h m n
参数keyword为关键字,choose是选择查询的方法。
z.u{Q u7`2}"}x:m6F0CREATE PROCEDURE [dbo].[dt_bbs]
}Q/Sxvj0@keyword varchar(20)=null,
7C gEr%K1e9P;x_0@choose int=null
N:Z$X@;O$X3x0as
$WC V#J$[\y.wM*F0if @choose=151Testing软件测试网&y
\-};iu
select * from bbs where name like @keyword51Testing软件测试网]n8[}4eup]
else51Testing软件测试网*^4NCp)^*|J+p
select * from bbs where subject like @keyword51Testing软件测试网ZX ?$E7x
return
ot-h t%}O+FP0go
|9s6E^_;^0这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序
:So,a7D+o(}0用第一种方法:51Testing软件测试网m:e1R#Oo.x
set rs=server.createobject("adodb.recordset")
wY(PZ%E"rx%H0sql="exec dt_bbs '"&keyword&"',"&choose&""
"A2\o3[UxB])|0rs.open sql,conn,1,151Testing软件测试网#kXw
V ?G@D
用第二种方法:51Testing软件测试网;e8Zm9B!IUZ7|1x
set comm=server.createobject("adodb.command")
$Ha^)Eb Qb'[s(f9|0comm.commantype=451Testing软件测试网'hgh c(]K^
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)51Testing软件测试网1fk'f$^0V#X4a
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)51Testing软件测试网%adzI)W
set comm.activeconnection=conn51Testing软件测试网M n'uy|$k
comm.commandtext="dbo.dt_bbs"51Testing软件测试网~*y.~-F?j$iX.?h
set rs=server.createobject("adodb.recordset")
G
L
`aF C0rs.CursorType=3
,\qn&Sg,v-Q?4\0rs.open comm,,1,1
f}!m"X}(k0$?,I5aI3K/`y/V03.进一步讨论51Testing软件测试网8v8ga(S^2|e@ d
比较上面我所说的两种在asp种调用存储过程的方法,51Testing软件测试网riX:l:xVJ
第一种方法需要对象少,但recordset对象支持的属性少了很多,比如说:rs.recordcount,rs.pagecount,rs.absolutepage这些属性51Testing软件测试网
wW |C(jf&K
都不支持,所以用第一种方法就有局限,比如说要分页显示纪录时,就必须要用到第二种方法。
'T P4jx6E;K0我们用sql server中的存储过程目的是为了加快速度,但一个存储过程中sql语句有很多时,它的优势特别明显。如果sql语句不是很多,
r4W(r6SPu[7O-uQ0而我们用第二种方法就必须多创建一个command对象,可能还会减慢速度!所以我们要均衡各方面的利益来使用存储过程。51Testing软件测试网/zR-Ysmg
不过我觉得不过速度怎样,使用存储过程可以使程序更加模块化,便于修改,和调试(可以直接在sql server下调试,而不用在ie下看asp的结果)。
,]!Zp0N7UkUgEW0
PRQxe&v3h0
收藏
举报
TAG:
ASP
存储过程
DataBase