DBNull 是一個單獨的類,這意味着該類只能存在此實例。它指數據庫中數據為空(<NULL>)時,在.net中的值
如果數據庫字段的數據缺失,則您可以使用 DBNull.Value 屬性將 DBNull 對象值顯式分配給該字段。然而,大部分數據提供程序會自動進行分配。
若要計算數據庫字段以確定其值是否為 DBNull,則可以將字段值傳遞給 DBNull.Value.Equals 方法。但此方法不常用,因為有許多其他方式可計算數據庫字段是否缺少數據。
例如:
if (! DBNull.Value.Equals(row[fieldName]))
return (string) row[fieldName] + " ";
else
return String.Empty;
DBNull.value==數據庫中的null值...
DBNull.value是對datatable來說的,他就相當於DB中的null,datatable中的null值只有用DBNull.value才能比較,
例如:drow[0]==DBNull.value;
延伸閱讀:
一、對表進行插入操作,如datetime和int類型的兩個字段,都允許為null,
用“sqlcmd.Parameters.Add("@t12",tb12.Text)”參數綁定時。datetime類型時,tb12.Text為空,插入成功,不報錯,查看該值,卻為1900-01-01;int類型時,用同樣語句,tb12.Text為空,插入成功,不報錯,查看該值,卻為0;用“sqlcmd.Parameters.Add(new SqlParameter("@t12",SqlDbType.DateTime));sqlcmd.Parameters["@t12"].Value=tb12.Text;”語句時,tb12.Text為空插入則報錯。
sqlcmd.Parameters.Add(new SqlParameter("@t12",SqlDbType.DateTime));
if (tb12.Text.Length>0)
{
sqlcmd.Parameters["@t12"].Value=tb12.Text
}
else
{
sqlcmd.Parameters["@t12"].Value = System.DBNull.Value;
}
二、
以下是我測試的一個例子。
例:表tbl_Student
id name address
1 jim <NULL>
將上述表數據填充到.net 的名為dt的DataTable中。
dt.Rows[0]["address"]不等於null但是等於DBNull.Value.
可見null表示一個對象的指向無效,即該對象為空對象。
DBNull.Value表示一個對象在數據庫中的值為空,或者說未初始化,DBNull.Value對象是指向有效的對象。
另外注:對上述dt,如果有如下代碼:dt.Rows[0][100]。結果如何?
並非想象中的null。而是出現異常:索引超出數組界限。
對於普通的引用類型變量,如果指向對象為null,則會提示:未將對象引用設置到對象實例。但對於使用dt.Rows[i][j]取值,如果第i行存在但i行沒有j列,則直接出現異常,不會返回一個指向null的dt.Rows[i][j]。
所以:使用(dt.Rows[0][100]!=null)判斷沒有意義。為避免0行的100列不存在。可以判斷(dt.Rows[0].ItemArray.Length>100).