DBNull.Value требуется для обнуляемых типов как SqlCommandParameter.Value - PullRequest
3 голосов
/ 27 февраля 2010

Какой подход рекомендуется:

void Add(int? value)
{
   command.Parameters.Add("@foo").Value = value;
}

или

void Add(int? value)
{
   command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value;
}

Ответы [ 2 ]

4 голосов
/ 27 февраля 2010

Если вы хотите передать нулевое значение в параметре, вам нужно передать DBNull.Value, как во втором примере.

Если вы назначите null в качестве значения параметра, параметр не будет отправлен в процедуру, что приведет к сбою вызова процедуры (если параметр требуется) или к значению параметра по умолчанию, которое может быть или не быть нулевым.

1 голос
/ 27 февраля 2010

Это зависит от требуемой функциональности.

Если вы передадите null в качестве значения, тогда SqlCommand будет воспринимать это так же, как если бы параметр не был передан вообще.Если это обязательный параметр, например, в хранимой процедуре, то это приведет к сбою вашего запроса.

Если вы передадите DBNull.Value, тогда SqlCommand будет воспринимать это как пропущенный нулевой SQL.

...