2011-12-29 68 views
2

我有一個可爲空的DateTime變量。我想將它寫入SQL DB。當我嘗試插入時:如何將Nullable DateTime變量的空值轉換爲DbNull.Value

如果變量有值,則沒有問題。

但是,如果它沒有值,插入中斷與一個錯誤。

我想問:我們如何通過DbCommand參數插入可空的DateTime到Sql?

(附註:SQL列可以爲空過。)

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

什麼錯誤,你得到什麼?我相信你*可以交替使用'null'和'DBNull.Value'。 – Yuck 2011-12-29 14:48:45

+1

@Yuck - 我不認爲你可以交換使用這兩個,或者至少你不能與所有的數據庫提供者一起使用。將空值插入數據庫時​​應使用DBNull.Value。在處理null和DBNull.Value時,語義上有細微差別:null引用無效的對象引用,而DBNull.Value引用數據庫行中的未知值。看起來像頭髮分裂,但這是我能看出差異的最佳推理。 – matt 2011-12-29 17:20:41

+0

@ mjd79它可以與'SqlDbCommand'一起使用,也許不會與'DbCommand'一起使用。 – Yuck 2011-12-29 17:51:44

回答

11

嘗試null coalescing operator

dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, (object) myDate ?? DbNull.Value); 
+3

我有點驚訝,這不是由數據庫提供商處理。 – 2011-12-29 14:42:06

0

試試這個

if(myDate.HasValue) 
    dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate.Value); 
else 
    dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, DbNull.Value);