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

Posted

技术标签:

【中文标题】SQL DataReader 如何显示查询中的空值【英文标题】:SQL DataReader how to show null-values from query 【发布时间】:2010-05-05 12:34:07 【问题描述】:

我有一个 DataReader 和一个 StringBuilder (C#.NET),以下列方式使用;

while (reader.Read())

    sb.AppendFormat("0,1,2,",reader["Col1"], reader["Col2"], reader["Col3"]);

这对我的使用非常有用,但是当一行为空时,我需要它返回“null”,而不仅仅是“”。有什么好的方法可以做到这一点?

非常感谢您的建议

【问题讨论】:

【参考方案1】:

试试:

Convert.IsDBNull(reader["Col1"]) ? "null" : reader["Col1"]

或者,如果您要重复使用它,这可能是紧密范围扩展方法的理想候选者,例如:

public static class ExtensionMethods

    public static object GetValueOrNull(this SqlDataReader reader, string key)
    
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    

所以你可以这样写:

var valueOfReader = reader.GetValueOrNull("Col1");

如果您需要在一个 StringBuilder.AppendFormat 调用中多次使用此逻辑,这肯定会让事情变得更整洁:

while (reader.Read())

    sb.AppendFormat("0,1,2,",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));

【讨论】:

很好的答案!非常感谢您花时间写下所有这些。 当然,如果你确实沿着扩展方法路线走,你可以返回任何东西(比如你传入的值)如果它是空的,而不仅仅是“空”——这将使它更灵活=) 简单的代码效果很好,但似乎“这个 SqlDataReader”在静态上下文中不起作用。并且“当前上下文中不存在名称'读者'”。您对如何解决这些问题有快速评论吗?不幸的是,我是这里的新手。 啊,我的错 - 对不起,我错过了一些东西 - 我已经相应地编辑了扩展方法:) @Rob - 感谢您抽出宝贵时间!我非常感谢。我设法让你的代码正常工作。【参考方案2】:
reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])

【讨论】:

我投票删除了我的答案,结果是一样的。我迟到了几秒钟!【参考方案3】:
reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString();

【讨论】:

【参考方案4】:
(string)reader["Col1"] ?? "null"

【讨论】:

以上是关于SQL DataReader 如何显示查询中的空值的主要内容,如果未能解决你的问题,请参考以下文章

如何写sql语句去掉oracle返回结果中的空值(NULL)

PL/SQL查询中的空值问题

使用mysql中的select语句替换sql中的空值?

SQL 查询数据连接具有它忽略的空值

MS SQL Server 2008 中的空值处理

检查 MS Access SQL 语句中的空值