Must know something of everything and everything of something!

ASP调用存储过程(转)

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

ASP调用存储过程

t3M1YtYqG3x0

h9Eg YrH"r3G5Q#rM01.调用存储过程的一般方法51Testing软件测试网+V3KBk]"D5G.F6D2x
先假设在sql server中有一存储过程dt_users:51Testing软件测试网9har"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"
BsGk3uS0set rs=server.createobject("adodb.recordset")
%V B!V \7Zc0rs.open comm,,1,1
zGA}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-ht%}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软件测试网'hg hc(]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软件测试网%a dzI)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 `aFC0rs.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

PRQ xe&v3h0

TAG: ASP 存储过程 DataBase

 

评分:0

我来说两句

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

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

RSS订阅

Open Toolbar