SQL Server中創建存儲過程時需要指定存儲過程的名稱、輸入參數、輸出參數等,在網上商城係統中,服務器端創建了實現登錄驗證、數據操作(增、刪、改、查)、數據分頁等存儲過程,大大提高了應用程序訪問數據庫的效率,具體如下。
3.1.1 實現登錄驗證的存儲過程
登錄存儲過程proc_Login主要用來驗證用戶名和密碼的合法性。基於存儲過程的優點,可以運用它實現登錄功能從而防禦SQL的注入攻擊,提高係統的安全性。另外,可以使用“WITH ENCRYPTION”語句對存儲過程的創建過程進行加密,具體代碼如下。
CREATE PROC proc_Login
@UserName VARCHAR(20), --輸入參數用戶名
@Pwd VARCHAR(20), --輸入參數密碼
@Return BIT OUTPUT --輸出參數,登錄結果
WITH ENCRYPTION
AS
BEGIN
IF EXISTS(SELECT COUNT(*)
FROM Admin
WHERE UserName=@UserName AND Pwd=@Pwd)
SET @Return=1 --驗證成功
ELSE
SET @Return=0 --驗證失敗
END
3.1.2 增加商品的存儲過程
網上商城係統中包括許多對數據表進行增加、刪除、修改或查詢的操作,這些都可以使用存儲過程來實現,從而提高係統的可維護性。這裏以增加商品來展示此類存儲過程的實現,其他功能隻需將存儲過程中的INSERT語句改成相應功能的語句即可。下麵的存儲過程共包括七個輸入參數,主要功能是實現商品信息的添加,具體代碼如下。
CREATE PROCEDURE proc_InsertProduct
@typeID INT, --類別編號
@goodsName VARCHAR(200), --商品名稱
@introduce TEXT, --商品介紹
@price FLOAT, --進貨價格
@picture VARCHAR(100), --商品圖片
@INTime DATETIME, --進貨日期
@remarks TEXT --備注
AS
BEGIN
INSERT INTO product
(typeID,goodsName,introduce,price,picture,INTime,remarks)
VALUES
(@typeID,@goodsName,@introduce,@price,@picture,
@INTime,@remarks)
END
3.1.3 實現分頁的存儲過程
經典的數據分頁方法是ADO記錄集分頁法,也就是利用ADO自帶的分頁功能來實現分頁,但這種分頁方法僅適用於數據量較小的情形,而不適合網上商城這類係統。由於存儲過程是事先編譯好的SQL語句,它的執行效率要比通過Web頁麵傳來的SQL語句的執行效率要高,因此在數據庫端編寫實現分頁的存儲過程很有必要,可以使用戶有較好的訪問體驗。實現通用的分頁功能,存儲過程設計時可以包括數據表名、需要返回的列、排序的字段名、頁尺寸、頁碼、返回的記錄總數等多個輸入參數,由於本文篇幅有限,代碼此處就不列出了。
3.2 存儲過程在.NET程序中的調用
.NET程序中要訪問數據庫及數據庫對象,首先,要定義ADO.NET的SqlConnection對象,並利用該對象打開與數據庫的連接;其次,需要創建一個SqlCommand對象,並指定該對象的類型為存儲過程;如果該存儲過程有輸入參數或者輸出參數,還需要依次在command對象的Parameters集合中通過Add()方法逐個添加參數,並將參數的值傳入或傳出;然後,通過Command對象的ExecuteNonQurey()、ExecuteReader()、ExecuteScalar()等方法調用存儲過程,將增加、刪除、修改的數據插入到數據庫中,或者是將數據返回到.NET程序中;最後,關閉數據庫連接。下麵以增加商品的存儲過程proc_InsertProduct為例,列出其在.NET中編寫的關鍵代碼: