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 !!

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jeffyeh 的頭像
    jeffyeh

    jeffyeh

    jeffyeh 發表在 痞客邦 留言(0) 人氣()