Sql Datareader 空值
Posted
技术标签:
【中文标题】Sql Datareader 空值【英文标题】:Sql Datareader null values 【发布时间】:2009-12-10 18:22:22 【问题描述】:我正在从 C# 中的 SQL 数据读取器读取数据并将值从列传递到下拉列表。有两列被读取。使用 IsDbNull,我能够处理空值。但是,正如我现在编写的代码一样,如果 dr.GetString(0) 为空,则根本不会传递任何值,而只要只有 dr.GetString(1)(或两者都不为空),所有的值被传递,空值被忽略。这是我在数据阅读器读取时所拥有的:
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 语句以整理代码。谢谢大家。
【问题讨论】:
很抱歉。阐明了我的代码的意图。 【参考方案1】:我在阅读器中处理空值的首选方法是使用命名列,然后使用 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) 为空, 根本没有传递任何值, 而只要只有 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,您的代码应该可以正常工作。
【讨论】:
附带说明:要表示其他可为空的值,您可以使用(为了存在)Nullable以上是关于Sql Datareader 空值的主要内容,如果未能解决你的问题,请参考以下文章