1

我正在从 C# 中的 SQL 数据读取器读取数据并将值从列传递到下拉列表。有两列被读取。使用 IsDbNull,我能够处理空值。但是,正如我现在编写的代码一样,如果 dr.GetString(0) 为 null,则根本不会传递任何值,而只要 dr.GetString(1)(或两者都不为 null),所有值被传递,空值被忽略。这是我在数据阅读器读取时所拥有的:

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

我需要做的是让下拉列表填充数据读取器返回的任何值,无论它们位于哪一列。我已经删除了 using 和 try/catch 语句以整理代码。谢谢大家。

4

1 回答 1

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),所有值被传递,空值被忽略。

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

编辑:

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

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;

这样,如果您没有数据,项目将为空。如果您在一行中有一列,而在下一行中有另一列,它将适当地添加它们。虽然,如果您取出 else,您的代码应该可以正常工作。

于 2009-12-10T18:31:46.950 回答