c DBNULL 收集整理

2021-09-02 03:42:20 字數 3529 閱讀 9231

該類用於指示不存在某個已知值(通常在資料庫應用程式中)。

在資料庫應用程式中,空物件是字段的有效值。該類區分空值(空物件)和未初始化值(dbnull.value   例項)。例如,表可以包含具有未初始化欄位的記錄。預設情況下,這些未初始化字段具有   dbnull   值。

該類還可以用於在   com   interop   中區分  vt_null   變數(與空物件關聯)和   vt_empty   變數(與   dbnull.value   例項關聯)。

dbnull   從不等於任何值。

dbnull   是乙個單獨的類,這意味著該類只能存在乙個例項。這個唯一的例項是   dbnull.value。 中國網管聯盟www_bitscn_com

訪問   sql   資料庫的資料密集應用程式必須使用   system.data.sqltypes   類,這些類對空值具有內在支援。

dbnull在dotnet是單獨的乙個型別,該類只能存在唯一的例項,dbnull.value,dbnull唯一作用是可以表示資料庫中的字串,數字,或日期,為什麼可以表示原因是dotnet儲存這些資料的類(datarow等)都是以 object 的形式來儲存資料的。對於 datarow , 它的 row[column] 返回的值永遠不為 null , 要麼就是具體的為column 的型別的值 。 要麼就是 dbnull 。 所以 row[column].tostring() 這個寫法永遠不會在tostring那裡發生nullreferenceexception。dbnull 實現了 iconvertible 。但是,除了 tostring 是正常的外,其他的to***都會丟擲不能轉換的錯誤。 54ne.com

null 關鍵字是表示不引用任何物件的空引用的文字值。null 是引用型別變數的預設值。那麼也只有引用型的變數可以為null,如果 int i=null,的話,是不可以的,因為int是值型別的。

"null"   means   the   object   reference   is   invalid   in   .net,   when   you   retrieve   a   null   value   from   the   database,   it   is   a   valid   value   to   .net,   and   it   is   represented   by   system.dbnull.value

null用於判斷reference   invalidate

這兩個都是表示空字串,其中有乙個重點是string str1="" 和 string str2=null 的區別,這樣定義後,str1是乙個空字串,空字串是乙個特殊的字串,只不過這個字串的值為空,在記憶體中是有準確的指向的,string str2=null,這樣定義後,只是定義了乙個string 類的引用,str2並沒有指向任何地方,在使用前如果不例項化的話,都將報錯。

convert.isdbnull()返回有關指定物件是否為 dbnull 型別的指示,即是用來判斷物件是否為dbnull的。其返回值是true或flase。 中國網管聯盟www.bitscn.com

dbnull在dotnet是單獨的乙個型別 system.dbnull 。它只有乙個值 dbnull.value 。dbnull 直接繼承 object ,所以 dbnull 不是 string , 不是 int , 也不是 datetime 。。。

但是為什麼 dbnull 可以表示資料庫中的字串,數字,或日期呢?原因是dotnet儲存這些資料的類(datarow等)都是以 object 的形式來儲存資料的。 中國網管聯盟www、

對於 datarow , 它的 row[column] 返回的值永遠不為 null , 要麼就是具體的為column 的型別的值。要麼就是 dbnull 。 所以 row[column].tostring() 這個寫法永遠不會在tostring那裡發生nullreferenceexception。

dbnull 實現了 iconvertible 。 但是,除了 tostring 是正常的外,其他的to***都會丟擲不能轉換的錯誤。

在 idbcommand(oledbcommand,sqlcommand...) 的executescalar的返回值中,情況可以這樣分析:

select 1 這樣返回的object是 1

select null 這樣返回的是dbnull.value

select isnull(null,1) 返回的是 1

select top 0 id from table1 這樣返回的值是null

select isnull(id,0) from table1 where 1=0 返回的值是null 中國網管聯盟www.bitscn.com

這裡 executescalar 的規則就是,返回第一列,第一行的資料。如果第一列第一行不為空,那麼executescalar就直接對應的dotnet的值。如果有第一行,但是第一 列為空,那麼返回的是 dbnull 。如果一行都沒有,那麼executescalar就返回null

規則就是這樣的。這裡容易犯的乙個錯誤是,把executescalar返回dbnull與null的情況混淆,例如:

string username=cmd.executescalar().tostring(); 中國網管聯盟www.bitscn.com

除非你認為cmd執行後,肯定至少有一行資料,否則這裡就會出錯。 網管聯盟www.bitscn.com

又或者 select id from usertable where username=@name 這樣的sql語句,如果找不到記錄,那麼executescalar則會返回null,所以千萬不要

int userid=convert.toint32(cmd.executescalar());

或者你會這樣寫 sql 語句:select isnull(id,0) from usertable where username=@name

但是 int userid=convert.toint32(cmd.executescalar()); 依然會出錯,因為上面的語句不成立時,仍然是不返回任何行。

對於idbdataparameter(oleddbparameter,sqlparameter..)的value,如果為null,則代表該引數沒有指定,或者是代表default。如果為dbnull.value,則代表sql中的null

所以,如果你要呼叫儲存過程,裡面有引數 @val nvarchar(20)="aabb" ,

那麼cmd.parameters["@val"].value=null 代表使用這個預設的 "aabb"

而cmd.parameters["@val"].value=dbnull.value 代表使用null來傳給 @val

你可以用convert.isdbnull來判斷乙個值是否dbnull。注意convert.isdbnull(null)是false。

system.dbnull型別直接繼承自object,它只有乙個例項就是system.dbnull.value;判斷是否是dbnull型別還可以用system.convert類提供的乙個方法convert.isdbnull(),convert.isdbnull(system.dbnull.value)等於true,convert.isdbnull(null)等於false。

python資料收集整理教案 資料收集整理教案

一 資料收集整理 第一課時 教學目標 初步體驗資料收集 整理 描述的過程,會用分類數數的方法將資料整理成 簡單的統計表,初步認識統計表,能正確填寫統計表,能從中獲得簡單統計的結 果。通過對學生身邊有趣事例的調查活動,激發學生學習的興趣,培養學生的合 作意識和實踐能力。教學重點 經歷收集和整理資料的過...

python資料收集整理教案 資料收集整理教案設計

資料收集整理 一 教案設計 教學目標 體驗資料收集 整理 描述和分析的過程,了解統計的意義。能根據統計表中的資料提出並回答簡單的問題,同時能夠進行簡單的分析。根據統 計表的資料提出有價值的數學問題及解決策略。教學重點 使學生初步認識簡單的統計過程,能根據統計表中的資料提出問題 回答問題,同時能夠進行...

css收集整理

整理一些自己平時用的比較多的或者巧技方便以後使用,不斷整理更新,筆記都是做給自己看的,略潦草 created by yangyurong on 2016.12.06 description 整理專案中常用的樣式 charset utf 8 reset start body,h1,h2,h3,h4,h...