1. 程式人生 > >C# 異常"關於物件不能從DBNull轉換為其他型別"

C# 異常"關於物件不能從DBNull轉換為其他型別"

        最近Tony小編在完善一個系統時候,無意之中遇到了這個異常,後來經過度孃的指點,才得知這是在處理資料的時候如果資料庫裡面的值為null,就會出現的錯誤。

例如:num = Convert.ToInt32(dt.Rows[i][j]),如果此時dt.Rows[i][j]的值為null就會出現這個錯誤,經過整理解決辦法如下:

             0.請檢查自己的SQL語句書寫的是否正確,這裡說的正確主要說的是兩點:

                     1)書寫格式(即成功執行);

                     2)檢索的where條件是否符合需求,以為Tony小編就是在這裡犯下的錯誤,本來條件想要寫為

                            "Times>=1 and Times <=3" 結果寫成了"Times<=1 and Times >=3";

                     確認以上兩點之後再使用一下解決方法。

             1.if (dt.Rows[i][j] == DBNull.Value)
                 { num = 0; }
                 else
                 { num = Convert.ToInt32(dt.Rows[i][j]); }

             2.在讀取資料庫資料時判斷

."Select IsNull(score,0) from score" 先把為null的資料表示為0

            from:http://hi.baidu.com/fmhyht/blog/item/5edb5acf42090f3bf9dc61df.html

             3.使用TryParse

                     Convert.ToInt32 int.Parse 較為類似,實際上 Convert.ToInt32 內部呼叫了 int.Parse

                     * Convert.ToInt32 引數為 null 時,返回 0

                     * int.Parse 引數為 null 時,丟擲異常。

                     * Convert.ToInt32 引數為 "" 時,丟擲異常;

                     * int.Parse 引數為 "" 時,丟擲異常。

                     * Convert.ToInt32 可以轉換的型別較多;

                     * int.Parse 只能轉換數字型別的字串。

                     int.TryParse int.Parse 又較為類似,但它不會產生異常,轉換成功返回 true,轉換失敗返回 false。最後一個引數為輸出值,如果轉換失敗,輸出值為 0
                     public static int ParseInt(object obj)
                         {
                             int reInt = -1;
                             if (obj != null)
                                 int.TryParse(obj.ToString(), out reInt);
                                 return reInt;
                         }