2010-05-05 73 views
1

我有一个DataReader和一个StringBuilder(C#.NET),使用方式如下:SQL DataReader如何显示查询中的空值

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

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

建议非常赞赏

回答

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

很好的回答!非常感谢您花时间写下所有这些。 – cc0 2010-05-05 12:45:22

+0

当然,如果你沿着扩展方法路线走,你可以返回任何东西(比如你传入的值),如果它是空的,不只是“空” - 这会使它更灵活=) – Rob 2010-05-05 12:45:49

+0

@ cc0,no problemo =) – Rob 2010-05-05 12:46:24

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

我投来删除我的回答,这是相同的。我太迟了! – sgmeyer 2010-05-05 12:37:57

+0

简单而快捷,非常感谢! – cc0 2010-05-05 12:44:33

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