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

时间:2010-05-05 12:34:07

标签: c# sql stringbuilder datareader

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

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

哪个适用于我的使用,但是当一行为null时,我需要它返回“null”,而不仅仅是“”。什么是实现这一目标的好方法?

建议非常感谢

4 个答案:

答案 0 :(得分:4)

reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])

答案 1 :(得分:4)

尝试:

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

答案 2 :(得分:1)

reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString();

答案 3 :(得分:1)

(string)reader["Col1"] ?? "null"