無法將型別為“System.DBNull”的物件強制轉換為型別“System.String”分析及解決方案
今天在做專案的時候,無意間犯了一個錯誤,出現了:無法將型別為“System.DBNull”的物件強制轉換為型別“System.String”。的錯誤提示。想著很多的初學者可能會遇上同樣的問題,現在分析出現的問題,並解決之。
問題:用強型別DataSet 獲取Oracle資料,其中一個欄位值為DBNull,報錯:無法強制轉換成String。
詳細錯誤資訊如下所示:
無法將型別為“System.DBNull”的物件強制轉換為型別“System.String”。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。
異常詳細資訊: System.InvalidCastException: 無法將型別為“System.DBNull”的物件強制轉換為型別“System.String”。
源錯誤:
行 5092: get {
行 5093: try {
行 5094: return ((string)(this[this.tableBRN_YXJX_MN_ATTACHED.AUDITER_CODEColumn]));
行 5095: }
行 5096: catch (global::System.InvalidCastException e) {後面還有很多的,就不再累述了。出現問題的原因如下:
資料庫中很多欄位是空值,但是需要載入到資料控制元件中,於是在預設的情況下就會出現問題了。因為微軟在設計的時候就是預設的資料欄位在載入的時候如果例項資料為空就會丟擲異常,正是由於微軟這個非常人性化的設計出現了上述的錯誤。
解決的方案:方案很多,這裡就說說幾種簡單方便的方案。
1、開啟強型別DataSet的設計檢視,找到報錯的列,選擇此列,在【屬性】視窗中可以看到一個設定
選項:
NullValue。
這個值有三個選項:Null,Empty,Throw exception
選擇Null或者Empty就OK了。
這個選項用於設定如果所取資料的這個欄位值為NullValue時的處理辦法。預設是第三個選項:丟擲異常。
修改後就OK了!
2、可以改寫SQL在 欄位新增ISNULL(["你的要查詢的欄位"],0);這個的效果是如果這個欄位的值是空那轉成"0";
3、 在讀取時價格判斷,if(讀的值!=“”){讀取值,賦值;}這個是如果讀的值不為空就執行賦值的操作
4、sdr.IsDBNull(5) ? string.Empty : sdr.GetString(5);這樣問題就會迎刃而解了。
相關文章
- PHP 型別轉換&&型別強制轉換PHP型別
- 將timestamp型別轉換為date型別型別
- java型別轉換與強制型別轉換(轉)Java型別
- 強制型別轉換型別
- 強制型別轉換之(==)型別
- Oracle Long型別轉換為Clob型別Oracle型別
- C++強制型別轉換C++型別
- 造型與強制型別轉換型別
- C++ 的強制型別轉換C++型別
- JavaScript中的強制型別轉換JavaScript型別
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- 強型別 JavaScript 的解決方案型別JavaScript
- JS在if中的強制型別轉換JS型別
- 引用型別變數的強制轉換型別變數
- C C++ 強制型別轉換C++型別
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- JavaScript強制型別轉換的背後操作JavaScript型別
- 深入淺出說強制型別轉換型別
- c++四種強制型別轉換C++型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- C++ 中四種強制型別轉換的區別C++型別
- Java資料型別及型別轉換Java資料型別
- SQL Server中型別轉換(將varchar值轉換為資料型別為int的列時發生語法錯誤)SQLServer資料型別
- 把一個任意型別的值轉換為布林型別型別
- javascript強制型別轉換與操作符JavaScript型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- swift 3.0:as語法與強制型別轉換的一些理解Swift型別
- 加了強型別如何將請求引數轉為整型型別
- String.valueOf和強制型別轉換(String)的區別型別
- 泛型作為返回型別的寫法泛型型別
- C++基本資料型別及型別轉換C++資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 在 Solidity 中將地址型別轉換為 IERC20 介面型別Solid型別
- 資料型別及轉換資料型別
- BigDecimal轉為String型別、int型別Decimal型別
- mybatis sql String>Double, 型別引數被強轉為數值型別MyBatisSQL型別
- C#中將DataTable型別轉化為泛型集合C#型別泛型