dbnull在dotnet是單獨的乙個型別 system.dbnull 。它只有乙個值 dbnull.value 。dbnull 直接繼承 object ,所以 dbnull 不是 string , 不是 int , 也不是 datetime 。。。
但是為什麼 dbnull 可以表示資料庫中的字串,數字,或日期呢?原因是dotnet儲存這些資料的類(datarow等)都是以 object 的形式來儲存資料的。
對於 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
這裡 executescalar 的規則就是,返回第一列,第一行的資料。如果第一列第一行不為空,那麼executescalar就直接對應的dotnet的值。如果有第一行,但是第一列為空,那麼返回的是 dbnull 。如果一行都沒有,那麼executescalar就返回null
規則就是這樣的。這裡容易犯的乙個錯誤是,把executescalar返回dbnull與null的情況混淆,例如:
string username=cmd.executescalar().tostring();
除非你認為cmd執行後,肯定至少有一行資料,否則這裡就會出錯。
又或者 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。
通常你會在什麼地方遇到DBNull
今天不只被外包,還要跑到虹橋機場去幫忙實施。可惜來到這裡又好象沒有什麼事幹。剛好可以寫寫blog 剛好這幾天寫資料庫操作比較多,是時候寫寫關於dbnull的東西了。dbnull在dotnet是單獨的乙個型別 system.dbnull 它只有乙個值 dbnull.value dbnull 直接繼承 ...
如果你很忙,你一定在什麼地方做錯
原文 if you re busy,you re doing something wrong 感謝 qingniu 幫助審閱和完成校對。解密優秀的小提琴演奏者模式 為什麼優秀的小提琴演奏者相比普通演奏者更加出色?乙個顯而易見的事先猜測認為,優秀演奏者更為專注於他們的才藝。意思就是說,他們可能更願意花...
如果你很忙,你一定在什麼地方做錯了!
柏林研究專案 早在1990年初,由三名心理學家組成的研究小組突然拜訪了柏林藝術大學 位於西柏林市中心的一所久負盛名的藝術教育機構。他們此行的目的是為了專門研究小提琴演奏者。我們把這個組稱為優秀演奏者小組。violinist diana yukawa 為了便於研究比較,教授和心理學家也會從學校的其他相...