测试某些值是否为null

时间:2012-04-10 12:48:41

标签: c#

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

        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";
                }
            }
         }

8 个答案:

答案 0 :(得分:7)

数据库中的

null 值有自己的特殊类型:

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

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

答案 1 :(得分:1)

需要查看DbNull.Value

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

答案 2 :(得分:1)

除了这些正确的精彩答案之外,我想补充一些关于null和DBNull的事情。

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

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

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

答案 3 :(得分:0)

它的值可能为DbNull.Value

答案 4 :(得分:0)

尝试将其与DBNull.Value

进行比较

http://msdn.microsoft.com/en-us/library/system.dbnull.value.aspx

答案 5 :(得分:0)

试试这个:

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

DbNull.Valuenull不同。

答案 6 :(得分: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";
            }
        }
    }

答案 7 :(得分: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);
}

我已为所有数据类型制作了这些。