Must know something of everything and everything of something!

ASP调用存储过程(转)

上一篇 / 下一篇  2007-05-11 12:05:21 / 个人分类:DataBase

ASP调用存储过程

e4~(Sk'rJ5O7F%OO0

PO8\`F01.调用存储过程的一般方法51Testing软件测试网x2_!oDi*W.l#b l
先假设在sql server中有一存储过程dt_users:51Testing软件测试网 Ut|!V/lS J!Ut!^
CREATE PROCEDURE [dbo].[dt_users]
B-c7tq`0AS51Testing软件测试网5`woB5P!C
select * from users51Testing软件测试网CtolESon p Ux
return
w E^Ra0GO
^#B d"sI-]Y%l$j0第一种方法是不利用command对象,直接用recordset对象51Testing软件测试网+mP&oCV8bExyp!`1dB
set rs=server.createobject("adodb.recordset")
'~-jYV#Hp0sql="exec dt_users"
u$v|4IFy'B0rs.open sql,conn,1,1 这样就可51Testing软件测试网m$~j+TUs.]-@&G$O X
第二种方法是利用command对象51Testing软件测试网JbJ2E6v:]@,H+e
set comm=server.createobject("adodb.command")
G-D6a[ \]*LP0comm.commantype=451Testing软件测试网 [*Cb2@1R+\r g"I
set comm.activeconnection=conn51Testing软件测试网%Ei8W([.j8}/e*tb
comm.commandtext="dbo.dt_users"51Testing软件测试网^$u't(LB P]Q9`ao
set rs=server.createobject("adodb.recordset")51Testing软件测试网wm-R l Q-Q,K2y3J1H
rs.open comm,,1,1
NPg.Y6|rZe02.给存储过程传递参数
.G({Q9\/@j0如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!51Testing软件测试网3w:y E-N~
比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:
SJ%W2T's @0参数keyword为关键字,choose是选择查询的方法。51Testing软件测试网.zk`vARIg
CREATE PROCEDURE [dbo].[dt_bbs]51Testing软件测试网:Q,l.\-l9FaN]
@keyword varchar(20)=null,51Testing软件测试网rl\5O'A
@choose int=null
.d!U\vP%Rm0as51Testing软件测试网Q7q"w}a Y1r
if @choose=151Testing软件测试网kuM IK G
select * from bbs where name like @keyword
lOiGh q1kv1]i:d0else
5[ sF.^5}Sly0select * from bbs where subject like @keyword
7y1s1l*bU`?2]'Q0return51Testing软件测试网,~3hX9Zshf
go
-|1n1`KRl` b!x+H0这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序51Testing软件测试网{ Xrx;S
用第一种方法:51Testing软件测试网%eN8\7|1K
set rs=server.createobject("adodb.recordset")51Testing软件测试网w(m N/hh],y^ w
sql="exec dt_bbs '"&keyword&"',"&choose&""
b"P)w@-wV3n0rs.open sql,conn,1,1
p M0Q {3Me-\0用第二种方法:
M$x5_$^)V([ b6}P&h0set comm=server.createobject("adodb.command")
4e'e Z1O$^we)q0comm.commantype=451Testing软件测试网u1H nQFh1KGw
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
Vq `^o&?0comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)51Testing软件测试网 f-M4n xMk
set comm.activeconnection=conn
8u2rk0YE5]sJ7_'w \0comm.commandtext="dbo.dt_bbs"
5D~"Pe"G#j6YlIZ,pe0set rs=server.createobject("adodb.recordset")
svH8vF\0rs.CursorType=351Testing软件测试网n!dL^ EO
rs.open comm,,1,1

R }}SJ/iRf0

1Ku-k~ }3~#F O&k03.进一步讨论51Testing软件测试网N+Jwn3F+H
比较上面我所说的两种在asp种调用存储过程的方法,
fy-H%JwD]0第一种方法需要对象少,但recordset对象支持的属性少了很多,比如说:rs.recordcount,rs.pagecount,rs.absolutepage这些属性
.P5mw;q8V&Zz0都不支持,所以用第一种方法就有局限,比如说要分页显示纪录时,就必须要用到第二种方法。
'a8TA$M[0我们用sql server中的存储过程目的是为了加快速度,但一个存储过程中sql语句有很多时,它的优势特别明显。如果sql语句不是很多,51Testing软件测试网`#ujPQ/\
而我们用第二种方法就必须多创建一个command对象,可能还会减慢速度!所以我们要均衡各方面的利益来使用存储过程。
?4Qc:dxv0不过我觉得不过速度怎样,使用存储过程可以使程序更加模块化,便于修改,和调试(可以直接在sql server下调试,而不用在ie下看asp的结果)。51Testing软件测试网1FeGM]n

h K/?C\js-j0

TAG: ASP 存储过程 DataBase

 

评分:0

我来说两句

日历

« 2024-02-22  
    123
45678910
11121314151617
18192021222324
2526272829  

数据统计

  • 访问量: 76114
  • 日志数: 93
  • 建立时间: 2007-03-22
  • 更新时间: 2007-12-31

RSS订阅

Open Toolbar