asp與儲存過程(stored procedures)的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了。
現在,我基本上通過呼叫儲存過程訪問sql server,以下的文字都是實踐的總結,希望對大家能有幫助。
儲存過程就是作為可執行物件存放在資料庫中的乙個或多個sql命令。
定義總是很抽象。儲存過程其實就是能完成一定操作的一組sql語句,只不過這組語句是放在資料庫中的(這裡我們只談sql server)。如果我們通過建立儲存過程以及在asp中呼叫儲存過程,就可以避免將sql語句同asp**混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。儲存過程本身的執行速度非常快,而且,呼叫儲存過程可以大大減少同資料庫的互動次數。
第二、提高安全性。假如將sql語句混合在asp**中,一旦**失密,同時也就意味著庫結構失密。
第三、有利於sql語句的重用。
在asp中,一般通過command物件呼叫儲存過程,根據不同情況,本文也介紹其它呼叫方法。為了方便說明,根據儲存過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的儲存過程
假設有以下儲存過程(本文的目的不在於講述t-sql語法,所以儲存過程只給出**,不作說明):
/*sp1*/
create procedure dbo.getuserlist
as set nocount on
begin
select * from dbo.[userinfo]
end
go 以上儲存過程取得userinfo表中的所有記錄,返回乙個記錄集。通過command物件呼叫該儲存過程的asp**如下:
'**通過command物件呼叫儲存過程**
dim mycomm,myrst
set mycomm = server.createobject("adodb.command")
mycomm.activeconnection = myconstr 'myconstr是資料庫連線字串
mycomm.commandtext = "getuserlist" '指定儲存過程名
mycomm.commandtype = 4 '表明這是乙個儲存過程
mycomm.prepared = true '要求將sql命令先行編譯
set myrst = mycomm.execute
set mycomm = nothing
儲存過程取得的記錄集賦給myrst,接下來,可以對myrst進行操作。
在以上**中,commandtype屬性表明請求的型別,取值及說明如下:
-1 表明commandtext引數的型別無法確定
1 表明commandtext是一般的命令型別
2 表明commandtext引數是乙個存在的表名稱
4 表明commandtext引數是乙個儲存過程的名稱
還可以通過connection物件或recordset物件呼叫儲存過程,方法分別如下:
'**通過connection物件呼叫儲存過程**
dim myconn,myrst
set myconn = server.createobject("adodb.connection")
myconn.open myconstr 'myconstr是資料庫連線字串
set myrst = myconn.execute("getuserlist",0,4) '最後乙個參斷含義同commandtype
set myconn = nothing
'**通過recordset物件呼叫儲存過程**
dim myrst
set myrst = server.createobject("adodb.recordset")
myrst.open "getuserlist",myconstr,0,1,4
'myconstr是資料庫連線字串,最後乙個參斷含義與commandtype相同
2. 沒有輸入輸出的儲存過程
請看以下儲存過程:
/*sp2*/
create procedure dbo.deluserall
as set nocount on
begin
delete from dbo.[userinfo]
end
go 該儲存過程刪去userinfo表中的所有記錄,沒有任何輸入及輸出,呼叫方法與上面講過的基本相同,只是不用取得記錄集:
'**通過command物件呼叫儲存過程**
dim mycomm
set mycomm = server.createobject("adodb.command")
mycomm.activeconnection = myconstr 'myconstr是資料庫連線字串
mycomm.commandtext = "deluserall" '指定儲存過程名
mycomm.commandtype = 4 '表明這是乙個儲存過程
mycomm.prepared = true '要求將sql命令先行編譯
mycomm.execute '此處不必再取得記錄集
set mycomm = nothing
當然也可通過connection物件或recordset物件呼叫此類儲存過程,不過建立recordset物件是為了取得記錄集,在沒有返回記錄集的情況下,還是利用command物件吧。
ASP開發中儲存過程應用全接觸
asp與儲存過程 stored procedures 的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了...
asp程式設計 ASP開發中儲存過程應用全接觸 2
3.有返回值的儲存過程 在進行類似sp2的操作時,應充分利用sql server強大的事務處理功能,以維護資料的一致性。並且,我們可能需要儲存過程返回執 況,為此,將sp2修改如下 sp3 create procedure dbo.deluserall as set nocount on begin...
ASP開發中儲存過程應用全接觸 1
asp與儲存過程 stored procedures 的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了...