System 命名空間


.NET Framework 類別庫
DBNull 類別

更新:2007 年 11 月

表示不存在的值。這個類別 (Class) 無法被繼承。

命名空間:  System
組件:  mscorlib (在 mscorlib.dll 中)
語法

Visual Basic (宣告)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class DBNull _
    Implements ISerializable, IConvertible
Visual Basic (使用方式)
Dim instance As DBNull
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DBNull : ISerializable, 
    IConvertible
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DBNull sealed : ISerializable, 
    IConvertible
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public final class DBNull implements ISerializable, 
    IConvertible
JScript
public final class DBNull implements ISerializable, IConvertible
備註

DBNull 類別表示不存在的值。例如,在資料庫中,資料表之資料列中的資料行可能不會包含任何資料。也就是說,系統會將該資料行視為完全不存在,而不只是沒有值的資料行。DBNull 物件表示不存在的資料行。此外,COM Interop 還會使用 DBNull 類別來辨別 VT_NULL 變數和 VT_EMPTY 變數,前者表示不存在的值,後者則表示未指定的值。

DBNull 型別是單一類別,其表示只有一個 DBNull 物件存在。DBNull..::.Value 成員則表示該唯一的 DBNull 物件。DBNull..::.Value 可用來將不存在的值明確指派到資料庫欄位,不過,如果欄位缺少有效的值,大多數 ADO.NET 資料提供者會自動指派 DBNull 值。若要判斷從資料庫欄位擷取的值是不是 DBNull 值,只要將該欄位的值傳遞至 DBNull.Value.Equals 方法即可。然而,某些語言與資料庫物件提供了一些方法,更容易判斷資料庫欄位的值是不是 DBNull..::.Value。其中包括 Visual Basic IsDBNull 函式、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法及 IDataRecord..::.IsDBNull 方法。

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

範例

下列範例會呼叫 DBNull.Value.Equals 方法,判斷連絡人資料庫中某個資料庫欄位的值是否有效。如果是,欄位值就會附加至標籤中的字串輸出。

Visual Basic
Private Sub OUtputLabels(dt As DataTable)
   Dim label As String 

   ' Iterate rows of table
   For Each row As DataRow In dt.Rows
      Dim labelLen As Integer
      label = String.Empty
      label += AddFieldValue(label, row, "Title")
      label += AddFieldValue(label, row, "FirstName")
      label += AddFieldValue(label, row, "MiddleInitial")
      label += AddFieldValue(label, row, "LastName")
      label += AddFieldValue(label, row, "Suffix")
      label += vbCrLf
      label += AddFieldValue(label, row, "Address1")
      label += AddFieldValue(label, row, "AptNo")
      label += vbCrLf
      labelLen = Len(label)
      label += AddFieldValue(label, row, "Address2")
      If Len(label) <> labelLen Then label += vbCrLf
      label += AddFieldValue(label, row, "City")
      label += AddFieldValue(label, row, "State")
      label += AddFieldValue(label, row, "Zip")
      Console.WriteLine(label)
      Console.WriteLine()
   Next
End Sub

Private Function AddFieldValue(label As String, row As DataRow, _
                          fieldName As String) As String
   If Not DbNull.Value.Equals(row.Item(fieldName)) Then
      Return CStr(row.Item(fieldName)) & " "
   Else
      Return Nothing
   End If
End Function
C#
private void OutputLabels(DataTable dt)
{
   string label; 

   // Iterate rows of table
   foreach (DataRow row in dt.Rows)
   {
      int labelLen;
      label = String.Empty;
      label += AddFieldValue(label, row, "Title");
      label += AddFieldValue(label, row, "FirstName");
      label += AddFieldValue(label, row, "MiddleInitial");
      label += AddFieldValue(label, row, "LastName");
      label += AddFieldValue(label, row, "Suffix");
      label += "\n";
      label += AddFieldValue(label, row, "Address1");
      label += AddFieldValue(label, row, "AptNo");
      label += "\n";
      labelLen = label.Length;
      label += AddFieldValue(label, row, "Address2");
      if (label.Length != labelLen)
         label += "\n";
      label += AddFieldValue(label, row, "City");
      label += AddFieldValue(label, row, "State");
      label += AddFieldValue(label, row, "Zip");
      Console.WriteLine(label);
      Console.WriteLine();
   }
}

private string AddFieldValue(string label, DataRow row, 
                             string fieldName) 
{                                
   if (! DBNull.Value.Equals(row[fieldName])) 
      return (string) row[fieldName] + " ";
   else
      return String.Empty;
}
繼承階層架構

System..::.Object
  System..::.DBNull
執行緒安全

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。
平台

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求
版本資訊

.NET Framework

支援版本:3.5、3.0、2.0、1.1、1.0

.NET Compact Framework

支援版本:3.5、2.0、1.0

XNA Framework

支援版本:2.0、1.0
請參閱

參考

標記 :


Page view tracker