1

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

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

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

非常感谢您的建议

4

4 回答 4

4
reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])
于 2010-05-05T12:36:04.020 回答
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"));
}
于 2010-05-05T12:38:17.967 回答
1
reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString();
于 2010-05-05T12:38:56.403 回答
1
(string)reader["Col1"] ?? "null"
于 2010-05-05T12:40:01.157 回答