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 方法。

不要将面向对象的编程语言的概念 nullDBNull 对象混淆。 在面向对象的编程语言中, null 意味着缺少对对象的引用。 DBNull 表示未初始化的变体或不存在的数据库列。

字段

名称 说明
Value

表示类的唯 DBNull 一实例。

方法

名称 说明
Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
GetHashCode()

用作默认哈希函数。

(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)
已过时.

ISerializable实现接口并返回序列化DBNull对象所需的数据。

GetType()

获取当前实例的 Type

(继承自 Object)
GetTypeCode()

TypeCode获取 . DBNull的值。

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回空字符串 (Empty)。

ToString(IFormatProvider)

使用指定的 IFormatProvider值返回空字符串。

显式接口实现

名称 说明
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

适用于

另请参阅