ASP 3.0高級編程(四十一)_ASP教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:ASP 3.0高級編程(十二)4.2.3 服務(wù)器端包含指令的例子 本節(jié)提供了一些示例頁面,可以用來對各種服務(wù)器端包含語句進(jìn)行實(shí)驗(yàn)。打開示例網(wǎng)頁的子目錄Chapter04,顯示“SSI Directives and the ASP Server Object&rdqu
9.2.3 存儲過程存儲過程的使用是Command對象得到應(yīng)用的一個領(lǐng)域。存儲過程(有時也稱存儲查詢)是存儲在數(shù)據(jù)庫中預(yù)先定義的SQL查詢語句。
為什么應(yīng)該創(chuàng)建和使用存儲過程而不是在代碼中直接使用SQL字符串呢?主要有以下幾個理由:
· 存儲過程被數(shù)據(jù)庫編譯過。這樣可以產(chǎn)生一個“執(zhí)行計(jì)劃”,因此數(shù)據(jù)庫確切地知道它將做什么,從而加快了過程的執(zhí)行速度。
· 存儲過程通常被數(shù)據(jù)庫高速緩存,這樣使它們運(yùn)行得更快,因?yàn)榇藭r不需要從磁盤中讀取它們。并非所有的數(shù)據(jù)庫都支持這種緩存機(jī)制,比如微軟的Access就不支持,而SQL Server卻支持。
· 通過指定數(shù)據(jù)庫中的表只能被存儲過程修改,可以確保數(shù)據(jù)更安全。這意味著具有潛在危險的SQL操作不會執(zhí)行。
· 可以避免將ASP代碼和冗長的SQL語句混在一起,從而使ASP代碼更易于維護(hù)。
· 可以將所有SQL代碼集中存放于服務(wù)器。
· 可以在存儲過程中使用輸出參數(shù),允許返回記錄集或其他的值。
一般說來,存儲過程幾乎總是比相當(dāng)?shù)腟QL語句執(zhí)行速度快。
為了使用存儲過程,只要將存儲過程的名字作為命令文本,并設(shè)置相應(yīng)的類型。例如,考慮前面更新書價的例子。如果在SQL Server上創(chuàng)建一個存儲過程,可以編寫代碼:
CREATE PROCEDURE usp_UpdatePrices
AS
UPDATE Titles
SET Price = Price * 1.10
WHERE TYPE='Business'
對于微軟的Access數(shù)據(jù)庫,可以使用一個簡單的更新查詢語句完成相同的任務(wù)
要在ASP網(wǎng)頁中運(yùn)行該存儲過程,只需要使用以下代碼:
Set cmdUpdate = Server.CreateObject("ADODB.Command")
cmdUpdate.ActiveConnection = strConn
cmdUpdate.CommandText = "usp_UpdatePrices"
cmdUpdate.CommandType = adCmdStoredProc
cmdUpdate.Execute , , adExecuteNoRecords
這只是運(yùn)行存儲過程。沒有記錄集返回,因?yàn)橹皇窃诟聰?shù)據(jù)。需要記住的是,除非確實(shí)需要,不要創(chuàng)建記錄集。
雖然這樣做也可以,但并不是很靈活,因?yàn)閮H僅處理一種類型的書。更好的做法是創(chuàng)建一個允許我們選擇書類型的過程,這樣就不必為每類書創(chuàng)建一個過程。同樣也可去掉固定的10%更新,這樣使得靈活性更好。那么,如何才能做到這一點(diǎn)呢,很簡單,使用參數(shù)。
1. 參數(shù)
存儲過程的參數(shù)(或變量)與一般的過程和函數(shù)的參數(shù)一樣,可以傳到函數(shù)內(nèi)部,然后函數(shù)可以使用它的值。SQL Server(其他數(shù)據(jù)庫也一樣,包括Access)中的存儲過程都具有這樣的功能。
為了使存儲過程能處理多種類型的書,甚至允許用戶指定價格的增加(或減少),需要增加一些參數(shù):
CREATE PROCEDURE usp_UpdatePrices
@Type Char(12),
@Percent Money
AS
UPDATE Titles
SET Price = Price * (1 @Percent / 100)
WHERE Type = @Type
現(xiàn)在,存儲過程usp_UpdatePrices帶有兩個參數(shù):
· 一個是書的類型(@Type)。
· 一個是書價變化的百分比(@Percent)。
與VBScript的函數(shù)一樣,這些參數(shù)都是變量。然而,與VBScript和其他腳本語言不同的是:在這些腳本語言中的變量都是variant類型,而SQL變量具有確定的類型(char、Money等等)。必須遵守SQL變量的命名規(guī)范,即變量必須以符號@開始。
注意,我們讓百分?jǐn)?shù)作為一個整數(shù)(如10代表10%),而不是作為一個分?jǐn)?shù)值傳入此過程。這只是讓存儲過程變得更直觀一些。
2. Parameters集合
那么,現(xiàn)在有了帶參數(shù)的存儲過程,但如何通過ADO來調(diào)用它呢?我們已經(jīng)見到了如何用Command對象調(diào)用不帶參數(shù)的存儲過程,實(shí)際上,它們之間并沒有什么不同。不同之處在于Parameters集合的使用。
Parameters集合包含存儲過程中每個參數(shù)的Parameter對象。然而,ADO并不會自動地知道這些參數(shù)是什么,因此,必須用CreateParameter方法創(chuàng)建它們,采用下面的形式:
Set Parameter = Command.CreateParameter (Name, [Type], [Direction], [Size], [Value])
參數(shù)及說明如表9-3所示:
表9-3 CreateParameter方法的參數(shù)及說明
參 數(shù)
說 明
Name
參數(shù)名。這是Parameters集合中的參數(shù)名,不是存儲過程中的參數(shù)名。然而,使用相同的名字是一個好的做法
Type
參數(shù)的數(shù)據(jù)類型?梢允且粋adDataType常數(shù),詳見附錄
Direction
參數(shù)的方向,指明是參數(shù)向存儲過程提供信息,還是存儲過程向ADO返回信息?梢允窍旅娴闹抵唬
adParamInput,參數(shù)是傳給存儲過程的輸入?yún)?shù)
adParamOutput,參數(shù)是從存儲過程檢索出的輸出參數(shù)
adParamInputOutput,參數(shù)可同時作為輸入和輸出參數(shù)
adParamReturnValue,該參數(shù)包含存儲過程返回的狀態(tài)
Size
參數(shù)長度。對于固定長度的類型,比如整型,該值可以忽略
Value
參數(shù)的值
一旦創(chuàng)建了參數(shù)就可以將其追加到Parameters集合中,例如:
Set parValue = cmdUpdate.CreateParameter("@Type", adVarWChar, adParamInput, _
12, "Business")
cmdUpdate.Parameters.Append parValue
Set parValue = cmdUpdate.CreateParameter("@Percent", adCurrency, _
adParamInput, , 10)
cmdUpdate.Parameters.Append parValue
沒有必要顯式地創(chuàng)建一個對象去保存參數(shù),缺省的Variant類型已經(jīng)可以工作得相當(dāng)好。如果不想創(chuàng)建一個變量,也可以走捷徑,例如下面的代碼:
cmdUpdate.Parameters.Append = _
cmdUpdate.CreateParameter("@Percent", adCurrency, adParamInput, , 10)
這使用CreateParameter方法返回一個Parameter對象,并用Append方法接收它。這種方法比使用變量運(yùn)行得快,卻加長了代碼行,可讀性比較差。可以根據(jù)自己的愛好選擇其中一種方法。
參數(shù)加到Parameters集合后,就保留在其中,因此,不一定在創(chuàng)建參數(shù)時就為每個參數(shù)賦值?梢栽诿钸\(yùn)行前的任何時候設(shè)置參數(shù)的值。例如:
cmdUpdate.Parameters.Append = _
cmdUpdate.CreateParameter("@Percent", adCurrency, adParamInput)
cmdUpdate.Parameters("@Percent") = 10
前一章提到了訪問集合中的值有好幾種方法,Parameters集合并沒有什么不同。上面的例子使用參數(shù)的名字在集合中檢索參數(shù),也可以使用索引號進(jìn)行檢索:
cmdUpdate.Parameters(0) = 10
以上代碼對參數(shù)集合中第一個(Parameters集合從0開始編號)參數(shù)進(jìn)行了賦值
分享:ASP應(yīng)用進(jìn)階 ASP Error對象的相關(guān)知識在VBScript中,有一個OnErrorResumeNext語句,它使腳本解釋器忽略運(yùn)行期錯誤并繼續(xù)腳本代碼的執(zhí)行。接著該腳本可以檢查Err.Number屬性的值,判別是否出現(xiàn)了錯誤。如果出現(xiàn)錯誤,返回一個非零值
相關(guān)ASP教程:
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁模板:ASP內(nèi)建對象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個小技巧
- eWebEditor v3.8 列目錄
- ASP無組件分頁實(shí)現(xiàn)思路及代碼
ASP教程Rss訂閱編程教程搜索
ASP教程推薦
- 探討:ASP.NET技術(shù)的學(xué)習(xí)順序問題
- asp是什么格式 asp文件用什么打開
- flash結(jié)合asp制作出的顯ip,版本,登陸時間,訪問次數(shù)
- ASP實(shí)例教程:Form集合
- ASP初學(xué)者常犯的幾個錯誤
- ASP常見數(shù)學(xué)函數(shù) Abs Atn Cos 等詳細(xì)詳解
- ASP應(yīng)用進(jìn)階 ASP Error對象的相關(guān)知識
- ASP進(jìn)階:驗(yàn)證身份證號是否正確的代碼
- 解讀用ASP生成偽靜態(tài)頁面的簡單方法
- IIS虛擬主機(jī)網(wǎng)站防木馬權(quán)限設(shè)置安全配置整理
- 相關(guān)鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(四十一)
。