DBNull 類別

定義

代表不存在的數值。 此類別無法獲得繼承。

public ref class DBNull sealed
public ref class DBNull sealed : IConvertible, System::Runtime::Serialization::ISerializable
public sealed class DBNull
public sealed class DBNull : IConvertible, System.Runtime.Serialization.ISerializable
[System.Serializable]
public sealed class DBNull : IConvertible, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DBNull : IConvertible, System.Runtime.Serialization.ISerializable
type DBNull = class
type DBNull = class
    interface IConvertible
    interface ISerializable
[<System.Serializable>]
type DBNull = class
    interface ISerializable
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type DBNull = class
    interface ISerializable
    interface IConvertible
Public NotInheritable Class DBNull
Public NotInheritable Class DBNull
Implements IConvertible, ISerializable
繼承
DBNull
屬性
實作

範例

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

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;
}
member this.OutputLabels(dt: DataTable) =
    let mutable label = ""

    // Iterate rows of table
    for row in dt.Rows do
        let mutable label = String.Empty
        label <- label + this.AddFieldValue(label, row, "Title")
        label <- label + this.AddFieldValue(label, row, "FirstName")
        label <- label + this.AddFieldValue(label, row, "MiddleInitial")
        label <- label + this.AddFieldValue(label, row, "LastName")
        label <- label + this.AddFieldValue(label, row, "Suffix")
        label <- label + "\n"
        label <- label + this.AddFieldValue(label, row, "Address1")
        label <- label + this.AddFieldValue(label, row, "AptNo")
        label <- label + "\n"
        let labelLen = label.Length
        label <- label + this.AddFieldValue(label, row, "Address2")
        let labelLen =
            if label.Length <> labelLen then
                label + "\n"
            else label
        label <- label + this.AddFieldValue(label, row, "City")
        label <- label + this.AddFieldValue(label, row, "State")
        label <- label + this.AddFieldValue(label, row, "Zip")
        printfn $"{label}"
        printfn ""

member _.AddFieldValue(label: string, row: DataRow, fieldName: string) =
    if DBNull.Value.Equals row[fieldName] |> not then
        (string row[fieldName]) + " "
    else
        String.Empty
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

備註

DBNull 類別代表不存在的值。 例如在資料庫中,資料表的某一列可能根本不包含任何資料。 也就是說,該欄位被視為根本不存在,而非僅僅沒有值。 物件 DBNull 代表不存在的欄位。 此外,COM 互通型用 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法。

不要將物件導向程式語言中的「 null 物件」與 DBNull 「物件」混淆。 在物件導向程式語言中,指 null 的是沒有對物件的參考。 DBNull 代表未初始化的變體或不存在的資料庫欄位。

欄位

名稱 Description
Value

代表該 DBNull 類別的唯一實例。

方法

名稱 Description
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetObjectData(SerializationInfo, StreamingContext)
已淘汰.

實作介面 ISerializable 並回傳序列化 DBNull 物件所需的資料。

GetType()

取得目前實例的 Type

(繼承來源 Object)
GetTypeCode()

得到 TypeCodeDBNull值。

MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ToString()

回傳一個空字串(Empty)。

ToString(IFormatProvider)

回傳一個空字串,使用指定的 IFormatProvider

明確介面實作

名稱 Description
IConvertible.ToBoolean(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToByte(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToChar(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToDateTime(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToDecimal(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToDouble(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToInt16(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToInt32(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToInt64(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToSByte(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToSingle(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToType(Type, IFormatProvider)

將目前 DBNull 的物件轉換為指定的類型。

IConvertible.ToUInt16(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToUInt32(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

IConvertible.ToUInt64(IFormatProvider)

此轉換不被支援。 嘗試進行此轉換會拋出一個 InvalidCastException

適用於

另請參閱