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

标签 c# sql stringbuilder datareader

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

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

这对我的使用非常有用,但是当一行为空时,我需要它返回“null”,而不仅仅是“”。实现该目标的好方法是什么?

非常感谢您的建议

最佳答案

尝试:

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

关于c# - SQL DataReader 如何显示查询中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773155/

相关文章:

c# - 当我们将其长度设置为零时,Stringbuilder 的 Capacity 属性真的很重要吗?

java - StringBuilder:ArrayIndexOutOfBoundsException

c# - 在 LoginView 中引用 ASP 控件

c# - GMail 未显示我使用 System.Net.Mail 发送的内联图像 (cid)

sql - 计数、排序并选择前 5 个

SQL:如何从两个不同的列中减去 TIME 数据类型并在 HH:MM:SS 中生成总和 AS

sql - 对带有 Case 语句的Where进行矛盾条件检查

Java StringBuilder 在调用追加之间删除新行?

C# - 从在线 xml 文件中获取数据

c# - Unity3D - GameObject.Find() vs Inspector 分配性能