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 如何显示查询中的空值的主要内容,如果未能解决你的问题,请参考以下文章