今天在將數據庫裡的datetime類型數據賦給C#裡DateTime類型變量的時候遇到一個問題,那就是數據庫裡面的datetime數據存在null值。
C#默認不能將null賦給DateTime變量,但是可以使用Nullable類型的DateTime,只需在聲明變量的時候在DateTime後加一個?號,如:
DateTime? x ;
x便可以賦null值。
但是從數據庫的datetime類型變為C#的DateTime類型需要Convert.ToDateTime();如果數據庫裡面的datetime數據為null的話,這個方法是不能使用的。
於是我加了個if語句:
if((row["date1"])!=null)
但是這個if語句無效,改成
row["date1"].ToString()!=null
仍然無法判斷數據庫中的datetime類型的列date1是否為null。
後來更改為row["date1"].ToString()!=""終於可以判斷了。完整語句為:
DateTime? x;
if(row["date1"].ToString()!="")
x=Convert.ToDateTime(["date1"]);
else
x=null;
注意最後x只能賦null,而不能像原來數據庫數據一樣賦""。因為x被聲明為Nullable<DateTime>類型變量的。
這樣,如果將x在存入數據庫的話,數據庫裡顯示為1900-1-1.
null和""在C#中的區別是前者沒有指向任何String對象,而後者為長度為0的String對象,且為其分配了內存空間。
但是剛剛試了一下,不論""或null存入數據庫的時候都是1900-1-1,如果想在數據庫裡也為null的話,可以選擇當x為null或""時,不存入數據庫中的相關列。