1
EnumType = reader["EnumTypeId"] == DBNull.Value ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];

reader["EnumTypeId"]nullの場合、値を割り当てる必要があると思いEnumType.Noneましたが、明らかに例外を引き起こしているintにnull値をキャストしようとしています。

次のことを試しましたが、どちらも機能しませんでした。

EnumType = reader["EnumTypeId"] == null ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];

を使用する代わりにEnums、先に進んで nullable を使用することにしたので、コードは少し異なりますが、 、、またはintではまだ機能しませんDBNull.ValuenullGetOrdinal...

intType= reader["intType"] == DBNull.Value ? null : (int?)reader["intType"];

(int?)また、キャストだけでなく、キャストを行う必要があるのはなぜ(int)ですか?

4

2 に答える 2

2

DBNullを使用せず、単純な古いを使用してくださいnull

EnumType = reader["EnumTypeId"] == null ? EnumType.None : (EnumType)(int)reader["EnumTypeId"];

編集

問題は、のデータベースタイプがEnumTypeIdint/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"];
于 2012-09-25T05:09:00.433 に答える
1

IsDBNull別の方法として次のメソッドを使用できます。

int index = reader.GetOrdinal("EnumTypeId");
EnumType = reader.IsDBNull(index) ? EnumType.None : 
                                    (EnumType)reader.GetInt32(index);
于 2012-09-25T05:13:50.487 に答える