更新:2007 年 11 月
表示不存在的值。這個類別 (Class) 無法被繼承。
命名空間:
System
組件:
mscorlib (在 mscorlib.dll 中)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class DBNull _
Implements ISerializable, IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DBNull : ISerializable,
IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DBNull sealed : ISerializable,
IConvertible
/** @attribute SerializableAttribute */
/** @attribute ComVisibleAttribute(true) */
public final class DBNull implements ISerializable,
IConvertible
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 方法,判斷連絡人資料庫中某個資料庫欄位的值是否有效。如果是,欄位值就會附加至標籤中的字串輸出。
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
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
參考