2016-09-28 9 views
0

投它繼續出現此錯誤"Object cannot be cast from DBNull to other types."totaldevotos += Convert.ToInt32(dr["Classificacao"])Asp.net自動遞增的數據(來自數據庫)給一個變量 - 錯誤對象不能從DBNull的

我嘗試到來自對象轉換數據庫"Classificacao"變成了Integer,(它在數據庫上是一個Int字段),有什麼想法?

string sql = "SELECT * from Users LEFT JOIN Cocktails on Users.ID_Utilizador=Cocktails.ID_utilizador1 LEFT JOIN Rating on Cocktails.ID_cocktail=Rating.ID_cocktail WHERE Cocktails.ID_utilizador1=Users.ID_utilizador AND Users.ID_utilizador=" + ID; 
int totaldevotos = 0; 
SqlDataReader dr = con.query(sql); 
while (dr.Read()) 
{ 
    if (dr.HasRows) 
    { 
     totaldevotos += Convert.ToInt32(dr["Classificacao"]); 
    } 
} 
+0

無論是否the'dr [「Classificacao」]爲空使用string.IsNullOrEmpty'功能或我建議改變你的SQL語句並在WHERE子句中添加'和Classificacao IS NOT NULL' – MethodMan

+0

嘗試這樣的事情。 。 'totaldevotos + = dr [「Classificacao」]。IsDbNull? 0:Convert.ToInt32(dr [「Classificacao」]);' – MethodMan

回答

1

對於至少某些行,數據庫中的值爲NULL。

在嘗試解析值,檢查,看它是否爲空。

if (dr.HasRows) 
{ 
    while (dr.Read()) 
    { 
     if (dr["Classificacao"] != DBNull.Value) 
     { 
      totaldevotos += Convert.ToInt32(dr["Classificacao"]); 
     } 
    } 
} 

此外,您只需要檢查dr.HasRows一次,就開始循環之前。

+0

它不是如果它有行..它的事實,你不能將一個DBNull.Value轉換爲一個Int .. tenary實際上將工作設置值,如果null到0其他...等.. – MethodMan

+0

我的救世主!謝謝!它像一個魅力一樣工作! –