ASP 3.0進階編程(四十一)

來源:互聯網
上載者:User
9.2.3 預存程序
預存程序的使用是Command對象得到應用的一個領域。預存程序(有時也稱儲存查詢)是儲存在資料庫中預先定義的SQL查詢語句。
為什麼應該建立和使用預存程序而不是在代碼中直接使用SQL字串呢?主要有以下幾個理由:
· 預存程序被資料庫編譯過。這樣可以產生一個“執行計畫”,因此資料庫確切地知道它將做什麼,從而加快了過程的執行速度。
· 預存程序通常被資料庫快取,這樣使它們運行得更快,因為此時不需要從磁碟中讀取它們。並非所有的資料庫都支援這種緩衝機制,比如微軟的Access就不支援,而SQL Server卻支援。
· 通過指定資料庫中的表只能被預存程序修改,可以確保資料更安全。這意味著具有潛在危險的SQL操作不會執行。
· 可以避免將ASP代碼和冗長的SQL語句混在一起,從而使ASP代碼更易於維護。
· 可以將所有SQL代碼集中存放於伺服器。
· 可以在預存程序中使用輸出參數,允許返回記錄集或其他的值。
一般說來,預存程序幾乎總是比相當的SQL語句執行速度快。
為了使用預存程序,只要將預存程序的名字作為命令文本,並設定相應的類型。例如,考慮前面更新書價的例子。如果在SQL Server上建立一個預存程序,可以編寫代碼:
CREATE PROCEDURE usp_UpdatePrices
AS
UPDATE Titles
SET Price = Price * 1.10
WHERE TYPE='Business'
對於微軟的Access資料庫,可以使用一個簡單的更新查詢陳述式完成相同的任務,如圖9-1所示:
圖9-1 使用微軟的Access資料庫完成更新查詢
要在ASP網頁中運行該預存程序,只需要使用以下代碼:
Set cmdUpdate = Server.CreateObject("ADODB.Command")
cmdUpdate.ActiveConnection = strConn
cmdUpdate.CommandText = "usp_UpdatePrices"
cmdUpdate.CommandType = adCmdStoredProc
cmdUpdate.Execute , , adExecuteNoRecords
這隻是運行預存程序。沒有記錄集返回,因為只是在更新資料。需要記住的是,除非確實需要,不要建立記錄集。
雖然這樣做也可以,但並不是很靈活,因為僅僅處理一種類型的書。更好的做法是建立一個允許我們選擇書類型的過程,這樣就不必為每類書建立一個過程。同樣也可去掉固定的10%更新,這樣使得靈活性更好。那麼,如何才能做到這一點呢,很簡單,使用參數。
1. 參數
預存程序的參數(或變數)與一般的過程和函數的參數一樣,可以傳到函數內部,然後函數可以使用它的值。SQL Server(其他資料庫也一樣,包括Access)中的預存程序都具有這樣的功能。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.