2012-04-10 61 views
2

我有以下代码,但出现问题。在我的同时,必须测试r [“Varandas”]是否为空。在特定的imovel_id中,r [“Varandas”]为null,但仍然通过我的代码,然后我得到一个异常错误,因为无法解析r [“Varandas”],因为它是null,但他为什么通过通过我的第一个IF在我的While循环中?测试一些值是否为空

 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

哇,5个回答在一分钟内 – Habib 2012-04-10 12:52:28

+0

@ habib.osu如果只有他们这一切很容易;) – Tobsey 2012-04-10 12:58:44

回答

7

从数据库值都有自己的特殊类型:

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

为了使它更优雅,你可以写一些简单的功能,甚至扩展为DataRow类。

0

它可能具有的DbNull.Value

+0

计算器很酷,问我要CAPCHA提交答案:) – 2012-04-10 12:51:20

+0

之前,你证明了你不是机器人:) – Reniuz 2012-04-10 13:13:53

1

需要检查DbNull.Value

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

试试这个:

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

A DbNull.Valuenull不一样。

0

试试这个:

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

像这样的东西应该做的伎俩:

/// <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); 
} 

我做了这些所有的数据类型。

1

除了这些美好的答案是正确的,我想补充一些关于null和DBNull的东西。

  • null是not任何类型的实例。 DBnull是 System.DBnull的实例。

  • null表示无效的引用,其中DbNull表示
    DB中不存在的值。

  • DBnull是数据库提供程序在表中提供的不存在的值。

相关问题