Передайте NULL в параметре в поле DateTime в хранимой процедуре - PullRequest
9 голосов
/ 03 марта 2011

У меня есть хранимая процедура, которая обновляет базу данных, используя параметры, которые я предоставляю, но у меня возникают проблемы при передаче NULL хранимой процедуре

Поле, которое мне нужно сделать NULL, является полем DateTime

DB.Parameters.AddWithValue("@date", NULL)

Это дает мне ошибку

'NULL' не объявлено. Константа Null больше не поддерживается; используйте взамен 'System.DBNull'

Итак, я попытался

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString())

Но это приводит к значению 1900-01-01 00:00:00.000 в столбце при передаче "" в поле

Я тоже пытался

DB.Parameters.AddWithValue("@date", DBNull.Value)

но выдает эту ошибку

Значение типа 'System.DBNull' не может быть преобразовано в 'String'.

У кого-нибудь есть идеи?

Ответы [ 4 ]

14 голосов
/ 09 января 2012

Или вы можете добавить свой параметр, как этот, который дает ему нулевое значение в базе данных, если ваша переменная равна нулю:

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);

вам нужно установить его как обнуляемый тип, как упомянул Амит.

Более подробную информацию и справочную информацию можно получить по адресу http://evonet.com.au/overview-of-c-nullable-types/

13 голосов
/ 03 марта 2011

Попробуйте что-то вроде этого, используя Add вместо AddWithValue:

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
2 голосов
/ 03 марта 2011

Попробуйте это

Если вы используете класс и его свойство, а значения этого свойства используются в качестве параметра, то вы можете сделать это

, чтобы сменить подпись свойства на

* 1006.*

Также, если столбец даты относится к типу varchar, исправьте его в Date (Sql2008) / DateTime (2005).

// изменить параметр на этот

@SomeDate datetime = null (as suggested by chris)

Разрешить полю принимать пустое значение, а затем передать значение как

DB.Parameters.Add("@date", DBNull.Value)
0 голосов
/ 06 октября 2017

Это пример.Это работа для меня

if(obj.myDate == DateTime.MinValue)
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value;
}
else
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ;
}
...