2012-04-10 13 views
2

Ich habe den folgenden Code, aber ich habe ein Problem. Innerhalb meiner While muss ich testen, ob r ["Varandas"] nicht null ist. In einer bestimmten imovel_id ist der r ["Varandas"] null, passiert aber immer noch meinen Code und dann bekam ich einen Ausnahmefehler, weil ich nicht in die r ["Varandas"] parsen kann, weil null ist, aber warum er bestanden hat durch meine erste IF in meiner While-Schleife?Testen, wenn ein Wert Null ist

 string s = "SELECT * " 
      + "FROM San_Imovel_Caracteristica " 
      + "WHERE Imovel_Id = " + imovel_id + " "; 

     SqlConnection c = new SqlConnection(conn.Con); 
     SqlCommand cmd = new SqlCommand(s, c); 
     c.Open(); 
     SqlDataReader r = cmd.ExecuteReader(); 

     while (r.Read()) 
     { 
      if (r["Varandas"] != null) 
      { 
       if (Convert.ToInt32(r["Varandas"].ToString()) > 0) 
       { 
        XmlElement itemImovel1 = doc.CreateElement("itemImovel"); 
        caracteristicasImovel.AppendChild(itemImovel1); 
        itemImovel1.InnerText = "varanda"; 
       } 
      } 
     } 
+0

wow, 5 Antworten in einer Minute – Habib

+0

@ habib.osu Wenn nur sie all dies waren leicht;) – Tobsey

Antwort

7

null Wert aus der Datenbank hat seine eigene besondere Art:

if (r["Varandas"] != DBNull.Value && r["Varandas"] != null) 

Um es elegantere Sie einige einfache Funktion schreiben kann oder sogar Erweiterung für die DataRow-Klasse.

0

Es könnte Wert von DbNull.Value

+0

Stackoverflow ist cool, hat mich gebeten, für ein capcha, bevor Sie eine Antwort :) –

+0

einreichen und Sie bewiesen, dass Sie nicht der Roboter :) – Reniuz

1

Müssen DBNull.Value dies überprüfen DbNull.Value

if (r["Varandas"] != DBNull.Value) 
0

Versuchen:

while(r.Read()) 
{ 
    object o = r["Varandas"]; 
    if ((o != null) && (o != DbNull.Value)) 
    { 
    // rest of your code 
    } 
} 

Ein DbNull.Value ist nicht dasselbe wie ein null.

0

versuchen Sie stattdessen:

string s = "SELECT * " 
     + "FROM San_Imovel_Caracteristica " 
     + "WHERE Imovel_Id = " + imovel_id + " "; 

    SqlConnection c = new SqlConnection(conn.Con); 
    SqlCommand cmd = new SqlCommand(s, c); 
    c.Open(); 
    SqlDataReader r = cmd.ExecuteReader(); 

    int outint; 

    while (r.Read()) 
    { 
     Object o = r["Varandas"]; 
     if (o != null && o != DbNull.Value) 
     { 
      if (int.TryParse(o.ToString(), out outint)) 
      { 
       XmlElement itemImovel1 = doc.CreateElement("itemImovel"); 
       caracteristicasImovel.AppendChild(itemImovel1); 
       itemImovel1.InnerText = "varanda"; 
      } 
     } 
    } 
0

So etwas wie dies den Trick tun sollten:

/// <summary> 
/// This function tries to cast the input object to a integer or returns the default value 
/// </summary> 
/// <param name="objInput">object to check</param> 
/// <param name="intDefault">optional default value</param> 
/// <returns>Object cast to string or default value</returns> 
public static int ValueOrDefaultForInteger(object objInput, int intDefault = 0) 
{ 
if (objInput == DBNull.Value | objInput == null) 
    return intDefault; 
return Convert.ToInt32(objInput); 
} 

Ich habe für alle Datentypen gemacht diese.

1

Zusätzlich zu diesen wunderbaren Antworten, die korrekt sind, möchte ich einige Dinge in Bezug auf Null und DBNull hinzufügen.

  • null ist not eine Instanz von jedem Typ. DBnull ist eine Instanz von System.DBnull.

  • Null steht für ungültige Referenz, wobei DbNull
    nicht vorhandenen Wert in DB darstellt.

  • DBnull ist, was Db-Provider für nicht existente Werte in einer Tabelle bereitstellen.

Verwandte Themen