Oh my god... DBNull.Value 別和 null 混為一談~:小朱的技術空間:Xuite日誌
  • 小朱
  • 一個畢業於國立屏東商技資管系,已有數年軟體發展經驗的毛頭小子,長期在網路各大論壇上游走,具有微軟MVP資格,並持有多張微軟認證,自詡為軟體技術玩家,以善用技術為本,以解決問題為目標,對企業應用系統、資料庫系統、分散式系統以及應用解決方案架構等皆有涉獵與研究,且不定期在 MSDN, RUN PC 與技術論壇中分享心得。



  • 文章分類
  • 搜尋文章
  • 關鍵字
  • 我的發燒文
  • 累積 | 今日
    loading......
  • 日曆
  • 最愛連結
  • 最新文章
  • 最新回應
  • 參觀人氣統計
  • 日誌使用資源






  • 如何使用RSS
    Powered by Xuite
    2008-10-06 13:28 Oh my god... DBNull.Value 別和 null 混為一談~
  • ?
  • .NET Framework
  • 好文轉寄
  • 平均分數:0 顆星    投票人數:0
    我要評分:
    標籤 : 


    在 .NET Framework 中,時常為了要判斷來自資料庫的值是不是 NULL,通常都會大傷腦筋,而有些開發人員會使用 if (myField.Value == null) 來判斷,其實這是不對的~

    資料庫的 NULL 值是一個標記,標示說資料庫目前這個欄位是空的,它的本質和空字串也不同,所以用 string.IsNullOrEmpty(myField.Value) 是無法判斷它是否為 NULL 值的,這也就是為什麼 DataRow 要提供一個 IsNull() 方法,而 DataReader 要多一個 IsDBNull() 的方法,就是因為 NULL 值的獨特性。

    .NET Framework 官方文件也有提到:

    請勿將物件導向程式語言中 Null 參照 (即 Visual Basic 中的 Nothing) 的概念與 DBNull 物件混為一談。在物件導向程式語言中,Null 參照 (即 Visual Basic 中的 Nothing) 表示物件的參考不存在。DBNull 則表示未初始化的變數或不存在的資料庫資料行。

    那是否有一定可以在程式中判斷 NULL 值的?其實有的,System.DBNull 類別所提供的成員 Value (DBNull.Value) 就是代表資料庫中的 NULL 標記,因此開發人員可以使用如下的程式碼來判斷是否為 NULL 值:

    public bool IsNull(object compareValue)
    {
       return (DBNull.Value.Equals(compareValue));
    }

    或者是直接用 == 算符也可以:

    public bool IsNull(object compareValue)
    {
       return (compareValue == DBNull.Value);
    }

    .NET Framework 對於 System.DBNull 類別的說明。



    小朱 / Xuite日誌 / 回應(1) / 引用(0) / 好文轉寄
  • 回應