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 可用于向数据库字段显式分配不存在的值,但当字段没有有效值 DBNull 时,大多数 ADO.NET 数据提供程序会自动分配 的值。 通过将数据库字段的值传递给 方法,可以确定从数据库字段DBNull.Value.Equals检索的值是否为DBNull值。 但是,某些语言和数据库对象提供的方法使确定数据库字段的值是否为 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()

获取 TypeCodeDBNull 值。

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

适用于

另请参阅