Here is a couple extension methods that will nicely wrap up all of your concerns around retrieving strongly typed values from a data reader. If the value is DbNull the default of the type will be returned. In the case of string
which is a class, a null
will be returned. If the field was int
, then 0
would be returned. Additionally, if you are expecting an int?
, say from an nullable int field, null
would be returned.
Specific Usage for Kumar's case:
string abc = datareader.GetValueOrDefault<string>(0);
General Usage
var name = GetValueOrDefault<string>(reader, "Name");
or
var name = reader.GetValueOrDefault<string>("Name");
or
var name = reader.GetValueOrDefault<string>(0);
Extension
public static class NullSafeGetter
{
public static T GetValueOrDefault<T>(this IDataRecord row, string fieldName)
{
int ordinal = row.GetOrdinal(fieldName);
return row.GetValueOrDefault<T>(ordinal);
}
public static T GetValueOrDefault<T>(this IDataRecord row, int ordinal)
{
return (T)(row.IsDBNull(ordinal) ? default(T) : row.GetValue(ordinal));
}
}
from http://skysanders.net/subtext/archive/2010/03/02/generic-nullsafe-idatarecord-field-getter.aspx