Asp.Net(C#)+Sql Server三層架構下資料存取方案(二)
來源:互聯網
上載者:User
asp.net|server|架構|資料 預存程序:
/**********************************
功能:根據一定條件讀取功能記錄
作者:Rexsp
建立日期:2004-01-13
修改者:
修改日期:
**********************************/
ALTER PROCEDURE GetScoreSetting
(
@ScoreSettingID INT=-1, ---設定ID
@FunctionID INT=-1, ---功能ID
@OperationID INT=-1, ---操作ID
@RoleTypeID INT=-1, ---角色類型
@BBSTypeID INT=-1, ---版塊類型
@Score INT=-1, ---積分設定
@BB INT=-1, ---幣幣設定
@BuyType INT=-1, ---購買類型 0:不是購買類型 1:一次性購買 2:反覆購買
@FunctionState INT=-1 ---功能狀態
)
AS
SET NOCOUNT ON
DECLARE @strSQL NVARCHAR(1000)
SET @strSQL = 'SELECT * FROM [ScoreSetting] WHERE @ckScoreSettingID = @ckScoreSettingID'
--- Add KeyWords Begin ---
IF @ScoreSettingID<> -1
BEGIN
SET @strSQL = @strSQL + ' AND ScoreSettingID= @ckScoreSettingID'
END
IF @FunctionID<> -1
BEGIN
SET @strSQL = @strSQL + ' AND FunctionID= @ckFunctionID'
END
IF @OperationID<>-1
BEGIN
SET @strSQL = @strSQL + ' AND OperationID = @ckOperationID'
END
IF @RoleTypeID<>-1
BEGIN
SET @strSQL = @strSQL + ' AND RoleTypeID = @ckRoleTypeID'
END
IF @BBSTypeID<>-1
BEGIN
SET @strSQL = @strSQL + ' AND BBSTypeID = @ckBBSTypeID'
END
IF @Score<>-1
BEGIN
SET @strSQL = @strSQL + ' AND Score = @ckScore'
END
IF @BB<>-1
BEGIN
SET @strSQL = @strSQL + ' AND BB= @ckBB'
END
IF @BuyType<>-1
BEGIN
SET @strSQL = @strSQL + ' AND BuyType= @ckBuyType'
END
IF @FunctionState<>-1
BEGIN
SET @strSQL = @strSQL + ' AND FunctionState= @ckFunctionState'
END
--- Add Where Key Word ---
--- Run SQL Begin ---
EXECUTE sp_executesql @strSQL,
N' @ckScoreSettingID INT,
@ckFunctionID INT,
@ckOperationID INT,
@ckRoleTypeID INT,
@ckBBSTypeID INT,
@ckScore INT,
@ckBB INT,
@ckBuyType INT,
@ckFunctionState INT',
@ckScoreSettingID=@ScoreSettingID,
@ckFunctionID=@FunctionID,
@ckOperationID = @OperationID,
@ckRoleTypeID = @RoleTypeID,
@ckBBSTypeID = @BBSTypeID,
@ckScore = @Score,
@ckBB = @BB,
@ckBuyType = @BuyType,
@ckFunctionState = @FunctionState
--- Run SQL End ---
一點說明:
此預存程序會根據資料層的類有沒有傳遞相應的參數值進來而動態建立查詢語句,然後用系統內建的預存程序執行sql語句,用系統預存程序執行sql語句的好處是可以自動逸出字元。而動態建立查詢語句的好處,就非常大了,這會省下我們寫很多種條件判斷,尤其是對那些欄位比較多的表來講,一個排列組合下來的情況太多了,而利用預存程序動態建立sql語句所作的判斷數和欄位數基本上是一致的,這裡會給入參賦初始值,如果不等於初始值就說明資料層類有傳遞參數進來,這樣就加上相應條件字元的查詢條件。