Null跟DBNull及String.Empty這三者,或許很少有人認真的去想過這三者的差異在那,而什麼時候要用那一個去判斷?
Null跟DBNull及String.Empty這三者,或許很少有人認真的去想過這三者的差異在那,而什麼時候要用那一個去判斷?
從簡單的if去比對這三者是否相等,很快的就發現這三者是不相等的.
null != DBNull /DBNull != string.Empty / null != string.Empty
那麼現在宣告了兩個變數,一個是string a="",另一個是string b=null; 那麼這兩個變數是各自符合那一種?
結果是
a != null;
a != DBNull
a = string.Empty
拿.Net 2.0才有的新判斷string.IsNullOrEmpty來看.也是為true
而b的部份則如下
b = null
b != dbnull
b != string.Empty
string.IsNullOrEmpty(b) = true
從這兩個例子看到什麼時候是Null,什麼時候是string.Empty,那麼DBNull呢?
DBNull的使用時機,當至資料庫查詢,符合的資料回傳的資料欄位沒有值,為null時,此時此欄位的值就=DBNull.
當至資料庫查詢,沒有符合的資料回傳時,此時回傳的結果就=Null.
Null是當物件未被初始化時的情況,例如 StreamReader reader;還沒有給new StreamReader();
ex :
object o=cmd.ExecuteScalar();(回傳一個欄位的值)
狀況1:當DB回傳有符合的資料,但該欄位沒有值時.o = DBNull 可是 o != null
狀況2:當DB回傳沒有符合的資料時, o = null可是o != DBNull
狀況3:不論是狀況1或狀況2的結果,Convert.ToString(o)=string.Empty;
參考 :
雖然看起來String.IsNullOrEmpty不錯用,但卻有Bug.
DANGER ! String.IsNullOrEmpty can lead to runtime Null exceptions !!