Как преобразовать нулевое значение переменной DateTime, допускающей значение Nullable, в DbNull.Value

У меня есть переменная DateTime с нулевым значением. И я хочу записать его в базу данных SQL. Когда я пытаюсь вставить:

Если переменная имеет значение, проблем нет.

Но если он не имеет значения, вставка прерывается с ошибкой.

Я хочу спросить: как мы можем вставить nullable DateTime в Sql через параметр DbCommand?

(P.S.: столбец Sql также может иметь значение NULL.)

DateTime? myDate = null;
DbCommand dbCommand = new DbCommand();
dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate);

person DortGen    schedule 29.12.2011    source источник
comment
Какую ошибку вы получаете? Я считаю, что вы можете использовать null и DBNull.Value взаимозаменяемо.   -  person Yuck    schedule 29.12.2011
comment
@Yuck - я не думаю, что вы можете использовать их взаимозаменяемо или, по крайней мере, вы не можете использовать их со всеми поставщиками баз данных. Вы должны использовать DBNull.Value при вставке нулевых значений в базу данных. Существует небольшая разница в семантике при работе с null и DBNull.Value: null относится к недопустимой ссылке на объект, тогда как DBNull.Value относится к неизвестному значению в строке базы данных. Кажется, что это мелочь, но это лучшее объяснение, которое я вижу для разницы.   -  person matt    schedule 29.12.2011
comment
@ mjd79 Это работает с SqlDbCommand, может быть, просто не с DbCommand.   -  person Yuck    schedule 29.12.2011


Ответы (2)


Попробуйте нулевой оператор объединения:

dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, (object) myDate ?? DbNull.Value);
person matt    schedule 29.12.2011
comment
Я немного удивлен, что это не обрабатывается поставщиком БД. - person George Mauer; 29.12.2011

попробуй это

if(myDate.HasValue)
  dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate.Value);
else
  dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, DbNull.Value);
person Brijesh Mishra    schedule 29.12.2011