我有一个DataReader和一个StringBuilder(C#.NET),用于以下方式;
while (reader.Read())
{
sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]);
}
哪个适用于我的使用,但是当一行为null时,我需要它返回“null”,而不仅仅是“”。什么是实现这一目标的好方法?
建议非常感谢
答案 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"