使用Subsonic 3.0.0.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 :(得分:0)
我手头没有Subsonic,但也许你可以使用nullable int。
int? dummyInt = null;
StoredProcedure sproc = db.Test_SPWithNullParams( dummyInt , "test");
答案 1 :(得分:0)
没办法。仅在没有可空类型的情况下生成存储过程。为什么不尝试这样的事情?:
StoredProcedure sproc = db.Test_SPWithNullParams( someNullableInt.HasValue ? someNullableInt.Value: 0, "test");