Null / DBNull / String.Empty 差異

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;

 參考 :

MSDN String.IsNullOrEmpty 方法

雖然看起來String.IsNullOrEmpty不錯用,但卻有Bug.

DANGER ! String.IsNullOrEmpty can lead to runtime Null exceptions !!