天天看點

asp調用存儲過程

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

1.調用存儲過程的一般方法

先假設在sql server中有一存儲過程dt_users:

CREATE PROCEDURE [dbo].[dt_users]

AS

select * from users

return

GO

第一種方法是不利用command對象,直接用recordset對象

set rs=server.createobject("adodb.recordset")

sql="exec dt_users"

rs.open sql,conn,1,1 這樣就可

第二種方法是利用command對象

set comm=server.createobject("adodb.command")

comm.commantype=4

set comm.activeconnection=conn

comm.commandtext="dbo.dt_users"

rs.open comm,,1,1

2.給存儲過程傳遞參數

如果存儲過程中不用參數,而是單一的sql語句,還顯示不出調用存儲過程的優勢!

比如說一bbs的查詢,可以按作者和主題查詢!則可以建立存儲過程如下:

參數keyword為關鍵字,choose是選擇查詢的方法。

CREATE PROCEDURE [dbo].[dt_bbs]

@keyword varchar(20)=null,

@choose int=null

as

if @choose=1

select * from bbs where name like @keyword

else

select * from bbs where subject like @keyword

go

這樣我們調用存儲過程時隻需将參數傳遞過去就行了,而省去在asp中來寫一段程式

用第一種方法:

sql="exec dt_bbs '"&keyword&"',"&choose&""

rs.open sql,conn,1,1

用第二種方法:

comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)

comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)

comm.commandtext="dbo.dt_bbs"

rs.CursorType=3

3.進一步讨論

比較上面我所說的兩種在asp種調用存儲過程的方法,

第一種方法需要對象少,但recordset對象支援的屬性少了很多,比如說:rs.recordcount,rs.pagecount,rs.absolutepage這些屬性

都不支援,是以用第一種方法就有局限,比如說要分頁顯示紀錄時,就必須要用到第二種方法。

我們用sql server中的存儲過程目的是為了加快速度,但一個存儲過程中sql語句有很多時,它的優勢特别明顯。如果sql語句不是很多,

而我們用第二種方法就必須多建立一個command對象,可能還會減慢速度!是以我們要均衡各方面的利益來使用存儲過程。

不過我覺得不過速度怎樣,使用存儲過程可以使程式更加子產品化,便于修改,和調試(可以直接在sql server下調試,而不用在ie下看asp

的結果)。

本文轉自 netcorner 部落格園部落格,原文連結: http://www.cnblogs.com/netcorner/archive/2007/05/31/2912372.html ,如需轉載請自行聯系原作者