2015年10月14日 星期三

C#筆記:DataTable 欄位中的DBNull

這篇後來發現我錯了,可以直接看2015/11/02號更新的地方。

---------------------------

經過了幾番掙扎(大概花了三秒),我的發文條件又再成功的降低了。

在資料庫的欄位為Null的時候,取回來的DataTable其欄位值會是一個特殊的DBNull。

DBNull在轉成String or Something的時候,會出現錯誤。

像是這樣:
dr["FieldName"].ToString();


如果要特地去用If判斷似乎有點麻煩。
if( !Convert.IsDBNull( dr["FieldName"] ) )
{
dr["FieldName"].ToString();
}


後來爬文後發現如果是 dr["FieldName"] as String 的話,不會丟回error,而是會轉換成null。

這樣的話搭配Convert.ToDecimal()轉換成數字會很方便。

因為Convert.ToDecimal()如果是Null的話會轉成0。

Convert .ToDecimal( dr[ "FieldName" ] as string )

上述的語法,即使FieldName裡面為DBNull也沒有關係,會順利的轉成0


2015/11/02更新
我錯了,不能這樣寫。

Convert .ToDecimal( dr[ "FieldName" ] as string )

實測之後發現dr[ "FieldName" ] as string如果FieldName的型態是數字的話,會變成null,而不是轉成字串的"1234"這樣的型式。

所以還是要判斷dr["FieldName"]是不是=DBNull……,又回到原點了。


如有更好的方法或者是有漏洞的話,還請各位先進不吝指教~謝謝。

參考資料:
The Best Way To Deal With DBNull

0 comments:

張貼留言