EnumType = reader["EnumTypeId"] == DBNull.Value ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];
我认为如果reader["EnumTypeId"]
为空,它应该分配EnumType.None
值,但它仍然试图将空值转换为显然导致异常的int。
我尝试了以下操作,它也无效:
EnumType = reader["EnumTypeId"] == null ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];
我没有使用Enums
,而是决定使用可空的int
,所以现在我的代码略有不同,但它仍然不适用于DBNull.Value
,{{ 1}},或null
GetOrdinal...
另外,为什么我必须进行intType= reader["intType"] == DBNull.Value ? null : (int?)reader["intType"];
演员而不仅仅是(int?)
演员?
答案 0 :(得分:2)
不要使用DBNull,只需使用普通的null
。
EnumType = reader["EnumTypeId"] == null ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];
修改强>
问题可能是EnumTypeId
的数据库类型不是int / Int32。如果是这样,那么读取字符串然后解析应该可以解决问题。
EnumType? enumVal = null;
if (reader["EnumTypeId"] != null)
{
int intVal;
enumVal = (int.TryParse(reader["EnumTypeId"].ToString(), out intVal)) ? (EnumType)intVal : null;
}
EnumType = ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];
答案 1 :(得分:1)
您可以使用的另一种方法是IsDBNull
方法:
int index = reader.GetOrdinal("EnumTypeId");
EnumType = reader.IsDBNull(index) ? EnumType.None :
(EnumType)reader.GetInt32(index);