在機房收費系統中的結賬部分,要求選中操作員然后點擊結賬按鈕后,將該操作員辦理的注冊、充值、退卡業務的狀態改為已結賬。注冊、充值和退卡分別記錄在三張表中,如果按照傳統的辦法,需要在DAL層寫三個函數,分別update每張表的isCheck為true,且不說寫多
在機房收費系統中的“結賬”部分,要求選中操作員然后點擊“結賬”按鈕后,將該操作員辦理的注冊、充值、退卡業務的狀態改為“已結賬”。注冊、充值和退卡分別記錄在三張表中,如果按照傳統的辦法,需要在DAL層寫三個函數,分別update每張表的isCheck為“true”,且不說寫多少代碼,費多少力氣,這樣還降低了系統的運行速度,容易出錯。
在個人版機房收費系統重構中,我們不是像以前那樣只要功能實現即可,而是變“懶”了,對重復的工作Say No,在這里就引入了存儲過程來解決這個問題。存儲過程是使用SQL語句和流程控制語句編寫的模塊,經編譯和優化后存儲在數據庫服務器端的數據庫中,使用時調用即可。
1.存儲過程的創建:
選擇要使用存儲過程下的“可編程性”,點開“+”號選擇"存儲過程",右擊在快捷菜單中選擇"新建存儲過程",然后顯示出如下的界面。咋一看有好多代碼,其實就是個模板,我們只需填寫一下。
注意:要在參數后注明數據類型,和數據庫中相應的字段類型保持一致。
2.使用存儲過程的D層代碼:
'結賬后將該用戶操作的業務[充值,退卡,注冊卡]isCheck改為true Public Function UpdateIsCheck(ecard As Card) As Boolean Implements ICheckOut.UpdateIsCheck Dim sqlHelper As New SqlHelper.sqlHelper '實例化sqlHelper類 Dim cmdType As CommandType = CommandType.StoredProcedure '定義命令類型,存儲過程 Dim cmdText As String = "PROC_CheckOut" '數據庫執行字符串 '傳參 Dim params As SqlParameter() params = {New SqlParameter("@ischeck", ecard.ProisCheck), New SqlParameter("@userID", ecard.ProuserID)} Return sqlHelper.ExecuteNoQuery(cmdText, cmdType, params) End Function
3.使用SQL語句的代碼:
Public Function ModifyPwd(euser As User) As Integer Implements IPwd.ModifyPwd Dim strSQL As String = "update T_User set userPwd =@pwd where userID=@userID" Dim params() As SqlParameter = {New SqlParameter("@pwd", euser.ProuserPwd), New SqlParameter("@userID", euser.ProuserID)} Dim helper As New SqlHelper.sqlHelper Dim result = helper.ExecuteNoQuery(strSQL, CommandType.Text, params) Return result End Function
相對于直接使用SQL語句,在應用程序中直接調用存儲過程有以下好處:減輕了程序編寫的工作量,降低了網絡通信量。調用一個行數不多的存儲過程與直接調用SQL語句的網絡通信量可能不會有很大的差別,可是如果存儲過程包含上百行SQL語句,那么其性能絕對比一條一條的調用SQL語句要高得多。由于在存儲過程創建的時候,數據庫已經對其進行了一次解析和優化。存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接調用,從而提高了執行速度。同時增強了SQL的功能和靈活性,間接實現安全控制功能。
這是第一次使用存儲過程,今后還會不斷地學習和運用。邁出了第一步,前邊的路就好走了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com