Вот пара методов расширения, которые приятно закроют все ваши проблемы, связанные с извлечением строго типизированных значений из устройства чтения данных. Если значение равно DbNull, будет возвращен тип по умолчанию. В случае string
, который является классом, будет возвращено null
. Если поле было int
, то будет возвращено 0
. Кроме того, если вы ожидаете int?
, скажем, от обнуляемого целого поля, будет возвращено null
.
Специальное использование для кумара:
string abc = datareader.GetValueOrDefault<string>(0);
Общее использование
var name = GetValueOrDefault<string>(reader, "Name");
или
var name = reader.GetValueOrDefault<string>("Name");
или
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));
}
}
от http://skysanders.net/subtext/archive/2010/03/02/generic-nullsafe-idatarecord-field-getter.aspx