这里有几个扩展方法,它们可以很好地解决您对从数据读取器检索强类型值的所有担忧。如果值为 DbNull,则将返回该类型的默认值。如果string
是类,null
则返回 a。如果该字段是int
,则将0
返回。此外,如果您希望返回一个int?
,例如来自可为空的 int 字段,null
则将返回。
Kumar 案例的具体用法:
string abc = datareader.GetValueOrDefault<string>(0);
一般用法
var name = GetValueOrDefault<string>(reader, "Name");
或者
var name = reader.GetValueOrDefault<string>("Name");
或者
var name = reader.GetValueOrDefault<string>(0);
延期
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