ASP開發中儲存過程應用全接觸 1

2021-04-07 01:31:36 字數 2734 閱讀 8561

asp與儲存過程(stored procedures)的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了。 

現在,我基本上通過呼叫儲存過程訪問sql server,以下的文字都是實踐的總結,希望對大家能有幫助。 

儲存過程就是作為可執行物件存放在資料庫中的乙個或多個sql命令。 

定義總是很抽象。儲存過程其實就是能完成一定操作的一組sql語句,只不過這組語句是放在資料庫中的(這裡我們只談sql server)。如果我們通過建立儲存過程以及在asp中呼叫儲存過程,就可以避免將sql語句同asp**混雜在一起。這樣做的好處至少有三個: 

第一、大大提高效率。儲存過程本身的執行速度非常快,而且,呼叫儲存過程可以大大減少同資料庫的互動次數。 

第二、提高安全性。假如將sql語句混合在asp**中,一旦**失密,同時也就意味著庫結構失密。 

第三、有利於sql語句的重用。 

1. 只返回單一記錄集的儲存過程 

/*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 的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了...