Oh~my god... 資料庫中的 NULL 值和程式語言中的 null 不同,別混為一談。

  • 12880
  • 0
  • 2017-05-20

在 .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 類別的說明。