2016-09-28 1 views
0

Es hält erscheinen, diesen Fehler "Object cannot be cast from DBNull to other types." auf totaldevotos += Convert.ToInt32(dr["Classificacao"]),Asp.net Auto-Inkrementdatenelement (das aus der Datenbank kommt) auf eine Variable -Fehler Objekt kann nicht von DBNull gegossen werden

im das Objekt zu konvertieren versuchen, die herkommt die Datenbank "Classificacao" in eine Integer, (es ist ein Int-Feld auf der Datenbank), irgendwelche Ideen?

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

entweder überprüfen, ob die 'dr [" Classificacao "] Null ist mit der Funktion string.IsNullOrEmpty oder ich würde vorschlagen, Ihre Sql-Anweisung und in der Where-Klausel hinzufügen' AND Classificacao IS NOT NULL ' – MethodMan

+0

versuchen, etwas wie das. 'totaldevotos + = dr [" Classificacao "]. IsDbNull? 0: Convert.ToInt32 (dr ["Classificacao"]); ' – MethodMan

Antwort

1

Der Wert in der Datenbank ist für mindestens einige Zeilen NULL.

Bevor Sie versuchen, den Wert zu analysieren, überprüfen Sie, ob er null ist.

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

Außerdem müssen Sie nur dr.HasRows einmal überprüfen, bevor Sie die Schleife starten.

+0

es ist nicht, wenn es Zeilen hat .. es ist die Tatsache, dass Sie einen DBNull.Value nicht in einen int .. tenary konvertieren können würde tatsächlich arbeiten, um den Wert zu setzen, wenn null zu 0 sonst ... etc .. – MethodMan

+0

Mein Retter! Vielen Dank! Es hat funktioniert wie ein Zauber! –

Verwandte Themen