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

2021-04-13 03:21:55 字數 2846 閱讀 3055

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