(LocalVariable)ABC.string(Name) = (IDataReader)dataReader.GetString(0);
此 name
值来自数据库。
如果此 name
为 null
,那么在读取它时会抛出异常吗?
我在这里手动做一些 if 条件。我不想编写手动条件来检查我的所有变量。
我现在正在做这样的事情..
String abc = dataReader.GetValue(0);
if (abc == null)
//assigning null
else
//assigning abc value
我们可以为此编写扩展方法吗?
最佳答案
这里有几个扩展方法,可以很好地解决您对从数据读取器检索强类型值的所有疑虑。如果值为 DbNull,则返回类型的默认值。如果 string
是一个类,将返回一个 null
。如果该字段是 int
,则将返回 0
。此外,如果您期望 int?
,比如来自可为 null 的 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
关于c# - 从 IDataReader 获取值的 Null 安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609875/