Sql Datareader为null值

时间:2009-12-10 18:22:23

标签: c# sql null if-statement datareader

我正在从C#中的SQL datareader读取并将列中的值传递给下拉列表。正在读取两列。使用IsDbNull,我能够处理空值。但是,由于我现在编写了代码,如果dr.GetString(0)为null,则根本不会传递任何值,而只要dr.GetString(1)(或两者都不是)为null,所有的传递值并忽略空值。以下是datareader正在阅读的内容:

while (dr.Read())
{
     if (!dr.IsDBNull(0))
     {
          machineName.Items.Add(dr.GetString(0).ToString());
     }
     else if (!dr.IsDBNull(1))
     {
          machineName.Items.Add(dr.GetString(1).ToString());
     }
 }

我需要做的是让dropdownlist填充datareader返回的任何值,无论它们在哪个列中。我已经删除了using和try / catch语句以便对代码进行整理。谢谢大家。

1 个答案:

答案 0 :(得分:6)

我在阅读器中处理空值的首选方法是使用命名列然后使用Convert.ToString(object)

所以,你有以下几点:

while (dr.Read())
{
     string firstItem = Convert.ToString(dr["FIRST_ITEM"]);
     if(!string.IsNullOrEmpty(firstItem))
     {
        machineName.Items.Add(firstItem);
     }
     ... etc.
}
但是,我不确定我理解你的问题 你说

  

但是,正如我编写的代码一样   现在,如果dr.GetString(0)为null,   根本没有传递任何值,   而只要dr.GetString(1)   (或两者都没有)是null,所有的   传递值和null   值被忽略。

听起来就像你正在使用if / else if,但是你的代码显示了两个if语句。

编辑:

为了更好地解决您更新的问题,我的解决方案是拥有ListItem的通用列表,并将每列添加到该列表中。然后,将该列表绑定到下拉列表:

List<ListItem> items = new List<ListItem>();

while(dr.Read())
{
    string firstItem = Convert.ToString(dr["FIRST_ITEM"]);
    if(!string.IsNullOrEmpty(firstItem))
    {
        ListItem thisItem = new ListItem(firstItem, firstItem);
        items.Add(thisItem);
    }
}

 machineName.Items = items;

这样,如果您没有数据,则项目将为null。如果一行中有一列而下一行中有另一列,则会适当地添加它们。虽然,如果你拿出其他代码,你的代码应该是一样的。