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.在讀取資料庫資料時判斷
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;
}