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 或 int?。诠释?是Nullable的简写方式,那么可以使用HasValue属性检查两个看是否为null。 甚至更简单 => !string.IsNullOrEmpty(dr["FIRST_ITEM"].ToString()) @ryanulit:如果该列不存在,那不会失败吗?我很确定(但我可能错了)如果列上的索引器失败,Convert.ToString() 方法不会引发异常。 我的错误。重新格式化时,我省略了“其他”。您在阅读器中检查空值的方法对我来说是新的。你们介意告诉我为什么我要使用字符串检查而不是 IsDbNullable 吗?谢谢。 这只是在数据读取器中访问列的另一种方式。当您开始在数据库中添加或删除列时,通过索引访问可能会很痛苦。从这个意义上说,通过列名访问更具可扩展性。在工作中,我们使用 Spring.Net 的 NullMappingDataReader 的定制版本,可以在这里找到:src.springframework.org/svn/spring-net/trunk/src/Spring/… 我想你会发现这个类非常有用。

以上是关于Sql Datareader 空值的主要内容,如果未能解决你的问题,请参考以下文章

Sql Datareader 空值

SQL DataReader 如何显示查询中的空值

Asp.net常用开发方法之DataTable/DataReader转Json格式代码

C# DataReader:Sql 批处理命令并返回结果

如何将 datareader 授予 sql 角色?

SQL Server锁定的DataReader行为