我正在从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语句以便对代码进行整理。谢谢大家。
答案 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。如果一行中有一列而下一行中有另一列,则会适当地添加它们。虽然,如果你拿出其他代码,你的代码应该是一样的。