如何判斷數據庫中取出的某個字段為空


如果通過name字段在數據庫中為空值,用 data.Tables[0].Rows[0]["AlarmFlag"] !=null 判斷得到的結果為 true ,原因為AlarmFlag字段讀出來為system.DBNull
其中AlarmFlag為tinyint類型
正確的判斷方法是
data.Tables[0].Rows[0]["AlarmFlag"] != System.DBNull.Value
也可以用下面的方法
data.Tables[0].Rows[0]["AlarmFlag"].ToString()!=""
附:null表示空對象或指針-在C#中)
System.DBNull表示空數據(數據庫在C#中的表示)
data.Tables[0].Rows[0].IsNull("TIME") ? DateTime.Now : Convert.ToDateTime(data.Tables[0].Rows[0]["TIME"])
其中TIME為DateTime類型
data.Tables[0].Rows[0].IsNull("CIRCLE") ? 0 : Convert.ToInt32(data.Tables[0].Rows[0]["CIRCLE"])
其中CIRCLE為int類型
MSDN:請勿將面向對象的編程語言中的  null引用(在 Visual Basic 中為  Nothing) 概念與 DBNull 對象混淆。在面向對象的編程語言中, null 引用(在 Visual Basic 中為  Nothing) 表示不存在對某個對象的引用。DBNull 則表示未初始化的變量或不存在的數據庫列。
附: 如何正確理解 SQL 中的 NULL

   在 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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM