標籤:des style blog http color 使用
一,定義
官方定義:是在大型資料庫系統中,一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。
個人理解:對資料庫進行複雜操作時,比如對多個表進行Update,Insert,Query,Delete時,對這些複雜操作的SQL語句的封裝。
二,基本文法: 1.建立預存程序
基本文法:create procedurepro_name()
begin
.........
End
注意:過程名:盡量以pro_或者proc_開頭,不建議使用使用sp_為首碼,因為SQLServer系統的預存程序都是以sp_開頭,這樣在尋找的時候會先尋找系統自身的,降低查詢速度。
2.調用預存程序
基本文法:callpro_name()
注意:預存程序名稱後面必須加括弧,哪怕該預存程序沒有參數傳遞
3.刪除預存程序
基本文法:
drop procedurepro_name//
注意:不能在一個預存程序中刪除另一個預存程序,只能調用另一個預存程序
好了,基本存放裝置過程的知識瞭解了,那我們現在機房收費系統階段最主要用到了預存程序的建立以及使用,現在用一個例子簡單介紹一下。
三,舉例--機房收費系統退卡
1.首先建立預存程序:在自己所建的資料庫中找到可程式化性--右擊預存程序---建立預存程序,
2.在建立的預存程序中添加相應的代碼:
-- =============================================-- Author:宋笑-- Create date: 2014年6月29日-- Description:退卡,刪除對應卡號的Card_info,student_info記錄,同時添加RetundCard_info-- =============================================CREATE PROCEDURE [dbo].[Proc_RetundCard]-- 添加所用到的參數@Cardno varchar(20), --退卡的卡號@Stuno varchar(20), --退卡人的學生號@Userno varchar(20), --退卡人的教工號@OnworkName varchar(20), --退卡的操作人員@RetundDate varchar(20), --退卡日期@RetundTime varchar(20), --退卡時間@RetundCash varchar(20), --退款金額@RetundName varchar(20) --退卡人ASBEGINSET NOCOUNT ON; -- 添加涉及到的SQL語句delete Card_info where Cardno [email protected] --刪除對應卡號的卡表記錄delete Student_info where Stuno [email protected] --刪除對應卡號的對應學生的學生記錄insert into CancelCard_info (Cardno ,Userno ,OnworkName ,RetundDate ,RetundTime ,RetundCash ,RetundName )values (@Cardno ,@Userno ,@OnworkName ,@RetundDate ,@RetundTime ,@RetundCash ,@RetundName ) --添加退卡記錄ENDGO
3.應用預存程序(D層)
*************************************************'文 件 名:SqlserverCancelCardDAL'命名空間:DAL'內 容:'功 能:'檔案關係:'作 者:宋笑'小 組:XX'產生日期:2014/6/29 21:12:19'版 本 號:V1.0.0.0'修改日誌:'著作權說明:'*************************************************Imports EntityImports IDALImports SqlHelperImports System.Data.SqlClientPublic Class SqlserverCancelCardDAL : Implements ICancelCard '定義並執行個體化SqlHelper類 Private clsSqlHelper As SqlHelper.SqlHelper = New SqlHelper.SqlHelper Public Function ReturnCard(enCard As CardEntity, enStudent As StudentEntity, enCancelCard As CancelCardEntity) As Integer Implements ICancelCard.ReturnCard '定義並執行個體化參數數組,防止SQL注入 Dim paras As SqlParameter() = {New SqlParameter("@Cardno", enCancelCard.Cardno), New SqlParameter("@Stuno", enStudent.Studentno), New SqlParameter("@Userno", enCancelCard.Userno), New SqlParameter("@OnworkName", enCancelCard.OnworkName), New SqlParameter("@RetunrdDate", enCancelCard.RetundDate), New SqlParameter("@ReturnTime", enCancelCard.RetundTime), New SqlParameter("@ReturnCash", enCancelCard.RetundCash), New SqlParameter("ReturnName", enCancelCard.RetundName)} '定義並執行個體化字串變數,用來要存放的SQL語句 Dim strsql As String = "PROC_CancelCard" '這裡的strsql不再存放單條SQL語句而是預存程序 '這裡的CommandType.Text換成了CommandType.StoredProcedure,執行的不是語句而是預存程序了。 Return clsSqlHelper.ExecAddDelUpdate(strsql, CommandType.StoredProcedure, paras) End FunctionEnd Class 注意:IDAL層與D層相對應,函數的參數與應用的實體有關,應用了幾個實體,參數增加,我這主要用到了卡,學生,退卡資訊實體,所以參數為3個。
使用了預存程序,使代碼變得更簡單了,不用再編寫多個函數來完成一個功能,有效地利用了封裝。