views:

105

answers:

4

I have a DataReader and a StringBuilder (C#.NET) used in the following way;

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

Which works great for my use, but when a row is null I need it to return "null", instead of just "". What would be a good way of accomplishing that?

Suggestions are very appreciated

+4  A: 
reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])
dcp
I voted to delete my answer, which was the same. I was a few seconds too late!
sgmeyer
Simple and quick, thanks a lot!
cc0
+3  A: 

Try:

Convert.IsDBNull(reader["Col1"]) ? "null" : reader["Col1"]

Alternatively, if you're going to be using this repeatedly, this is probably an ideal candidate for a tightly scoped Extension Method, for example:

public static class ExtensionMethods
{
    public static object GetValueOrNull(this SqlDataReader reader, string key)
    {
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    }
}

So you could then write:

var valueOfReader = reader.GetValueOrNull("Col1");

Which would definately make things tidier if you needed to use this logic multiple times inside one StringBuilder.AppendFormat call:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));
}
Rob
Great answer! Thank you very much for taking the time to write up all of that.
cc0
Of course, if you did go down the extension method route, you could return anything (such as a value you pass in) if it's null, not just "null" - which would make it more flexible =)
Rob
@cc0, no problemo =)
Rob
The simple code works great, it seems however that "this SqlDataReader" doesn't work in a static context. And "the name 'reader' does not exist in the current context". Do you have a quick comment on how to fix those? I'm unfortunately fairly newbie here.
cc0
Ahh my bad - sorry, I missed something - I've edited the extension method accordingly :)
Rob
@Rob - Thanks for taking the time! I very much appreciate it. I managed to get your code working.
cc0
+1  A: 
reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString();
David Liddle
+1  A: 
(string)reader["Col1"] ?? "null"
Anthony Faull