System.DBNull表示空數據(數據庫在C#中的表示)
在 SQL 語句中, NULL 值與字符列中的空格, 數字中的零, 字符列中的 NULL ASCII 字符都不相同. 當DBMS在一列中發現一個 NULL 值時, 就將其翻譯為未定義或是不可用的. DBMS不能在一列中做出有關 NULL 的假設, 也不能假設 NULL 值等於 NULL, 造成某一列成為 NULL 的因素可能是: (1),值不存在;(2), 值未知; (3), 列對表不可用. 所以, 應將 NULL 值當作是一個批示符, 而不是一個值. 當DBMS 在表的某一行的某一列中找到 NULL 值時, DBMS就知道該數據已丟失或者是不可用.
一句話, NULL 指示這個值 "未知",原因是它可能不存在, 可能不可用, 也可能就是因為值未知.
這里對各個環境下的 "空值" (不知道該怎樣總稱這些東西, 暫且就叫空值吧!)簡單的解釋一下:
1:真正的空值 (SQL 中的 NULL)
等同“沒有輸入的值”,可以出現在大多數類型的字段中(如果沒有別的約束條件),SQL server中表示為null,顯示為,手工在SQL server企業管理器中輸入的方法是按Ctrl+0。它在.NET中對應System.DBNull.Value。在T-SQL命令中,判斷一個值是不 是空值,要用“is null”而不是“= null”;處理空值有個ISNULL函數,它使用指定的值替換null。用ADO.NET從數據庫得到的空值無法自動轉化為空字符串或Nothing, 須手動檢測:如果得到System.DBNull.Value,則賦給數據對象Nothing或其它自定義的有意義的值。
2:空字符串 (零長度字符串),只出現在字符串類型(如nvarchar)的字段中,SQL server中表示為’’,顯示為空白,手工在SQL server企業管理器中輸入時清空一個單元格即可。它在.NET中對應System.String.Empty,也就是我們常用的""。在T-SQL命 令中處理空字符串和處理一般的字符串沒什么區別。用ADO.NET從數據庫得到的空字符串也和一般的字符串沒什么區別。
3. VB.NET中的Nothing; 它其實對應於C#.NET中的null(注意這個null是C#.NET中的null而非SQL Server中null),它們在.NET中是表示不引用任何對象的空引用的值,在傳入
SQL server時,根據不同的上下文環境,可能存為真正的空值(比如在更新一個字符串類型的字段值時),也可能調用在SQL server中自定義的默認值(比如傳給一個有默認值的存儲過程參數),也可能因為無法進行類型轉換而引發.NET異常。因此在用ADO.NET向SQL server中存儲數據時,大家一定要小心使用Nothing。
4.undefined 值與 null 的區別是:
一般情況下, 下列情況可使用undefined值:
(1),對象屬性不存在,
(2),聲明了變量但從未賦值。
而釋放引用,跟蹤結果為變量值等操作使用 null.