如何判斷資料庫中取出的某個欄位為空

2021-09-07 23:07:29 字數 2277 閱讀 3657

如果通過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.

插入資料庫某個字段之前判斷是否重複

做insert操作時,可能在儲存之前要判斷使用者輸入的某個資料是否在資料庫中唯一存在,是否與其他資料重複。這裡重點記錄sql語句以及service如何實現。1 錯誤示範 service層 selmap commdao.selectone kfsgl kfsdm q paramsmap dao層 se...

SQL SERVER如何判斷某個字段包含大寫字母

sql語句中預設是不區分大小寫的,所以語句 sql select from recenginebizinfo where recenginebizname qq 和 sql select from recenginebizinfo where recenginebizname qq 查到的結果是一樣...

oracle中判斷某個字段是否存在

oracle中判斷某個字段是否存在 document為表名 docid為欄位名 select count column name from cols where table name upper document and column name upper docid 如果查詢出來的為0說明docu...