天天看點

DBnull和null的差別有哪些



一、DBNull

1、DBNull 從不等于任何值。DBNull是一個單獨的類,這意味着該類隻能存在一個執行個體。這個唯一的執行個體是 DBNull.Value。

2、DBNull 類表示一個不存在的值。例如,在資料庫的表中,某一行的某列中可能不包含任何資料。即,該列被視為根本不存在,而不隻是沒有值。一個表示不存在的列的 DBNull 對象。

3、在資料庫應用程式中,空對象是字段的有效值。該類用于區分空值(空對象)和未初始化值(DBNull.Value執行個體)。例如,表可以包含具有未初始化字段的記錄。預設情況下,這些未初始化字段具有DBNull值。

4、DBNull作用是可以表示資料庫中的字元串,數字,或日期,為什麼可以表示原因是DotNet儲存這些資料的類(DataRow等)都是以 object 的形式來儲存資料的。對于 DataRow , 它的 row[column] 傳回的值永遠不為 null , 要麼就是具體的為column 的類型的值 。要麼就是 DBNull 。 是以 row[column].ToString() 這個寫法永遠不會在ToString那裡發生NullReferenceException。

二、DBNull與Null的差別

1、Null是.net中無效的對象引用。

2、DBNull是一個類。DBNull.Value是它唯一的執行個體。它指資料庫中資料為空(<NULL>)時,在.net中的值。

3、null表示一個對象的指向無效,即該對象為空對象。

4、DBNull.Value表示一個對象在資料庫中的值為空,或者說未初始化,DBNull.Value對象是指向有效的對象。

5、使用ExecuteScalar時,将傳回第一列,第一行的資料。如果一行都沒有,那麼ExecuteScalar就傳回null。如果有第一行,但是第一列為空,那麼傳回的是 DBNull 。如果第一列第一行不為空,那麼ExecuteScalar就直接對應的DotNet的值。

參考資料:   DBnull和null的差別    http://www.studyofnet.com/news/582.html