2010-02-11 159 views
0

使用Subsonic 3.0.0.3將空值傳遞給存儲過程參數是否可行?如果是這樣,什麼是適當的方式?Subsonic 3 - 將空值傳遞給存儲過程參數

詳細
都說我是個SP,其中的一個參數有一個像一個默認值:

CREATE Procedure Test_SPWithNullParams(@p1 int=null, @p2 varchar(50)) 
    AS 
    SELECT 1 as Stuff 

然後在我的代碼我做這樣的事情:

var db = new Sandbox.DB(); 
StoredProcedure sproc = db.Test_SPWithNullParams(null , "test"); 
//alternately --> db.Test_SPWithNullParams("test"); 

在StoredProcedures.cs中生成的相應函數的方式,但@ p1的參數不可爲空。那麼我的替代品是什麼?我遇到了這篇文章(http://brianmrush.wordpress.com/2010/01/19/subsonic-t4-templates-stored-procedures-nullable-parameters),但它似乎是一個繁瑣的工作,有效地分支代碼庫。

另外我想過手動覆蓋命令對象。例如:

int dummyInt = -1; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
sproc.Command.Parameters[0].ParameterValue = DBNull.Value; 

想法?

回答

0

我沒有亞音速手頭,但也許你可以使用可空int。

int? dummyInt = null; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
+0

對不起,但定義可爲空dummyInt參數防止編譯。 Subsonic寫入「db.Test_SPWithNullParams」,不含可爲空的參數。這意味着我需要做一個(int.hasvalue?int:0)或定義一個不可爲空的參數。既不允許我傳遞一個空值給我的SP。 – EBarr 2010-02-16 16:40:16

0

沒辦法。存儲過程僅在不可爲空類型的情況下生成。爲什麼不嘗試這樣的東西?:

StoredProcedure sproc = db.Test_SPWithNullParams(someNullableInt.HasValue ? someNullableInt.Value: 0, "test"); 
+0

我明白Subsonic會生成不可爲空的函數參數。但是,我的數據模型在某些情況下需要空值。上面的建議發送一個非空值或零,而不是我需要的空值。 – EBarr 2010-02-16 16:37:29

+0

對不起,忘了問..是什麼讓這是一個「不通」?我的數據模型需要空值。 – EBarr 2010-02-16 16:41:08

+0

您需要修改Subsonic模板StoredProcedures.tt並查看Subsonic內核是否標識過程何時具有null參數。否則,你實際上需要分支Subsonic。 – Apocatastasis 2010-02-16 16:44:05

相關問題