Subsonic 3 - 将空值传递给存储过程参数

时间:2010-02-11 17:53:46

标签: sql-server stored-procedures subsonic subsonic3

使用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;

思想?

2 个答案:

答案 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");