Дозвуковая 3 - Передача нулевого значения в параметр хранимой процедуры - PullRequest
0 голосов
/ 11 февраля 2010

При использовании 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 голосов
/ 12 февраля 2010

Ни за что. Хранимые процедуры генерируются только без обнуляемых типов. Почему бы не попробовать что-то подобное?:

StoredProcedure sproc = db.Test_SPWithNullParams( someNullableInt.HasValue ? someNullableInt.Value: 0, "test");
0 голосов
/ 12 февраля 2010

У меня нет Subsonic под рукой, но, возможно, вы могли бы использовать nullable int.

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