오류가 계속 발생합니다. System.InvalidCastException : 지정된 캐스트가 유효하지 않습니다. 런타임 중에. RewardJoinType은 db에서 null 일 수 있습니다. Int16에 Nullable 열거 형을 캐스팅합니다.
이
캐스트 실패 코드 라인 :c.rewardJoinType = (RewardJoinType)reader.GetInt16();
'reader.GetInt16을()'형태의 예외 'System.InvalidCastException'짧은 System.InvalidCastException {}를 던진
클래스에서 나는 다음과 같은 코드의 라인있어 ... 다른 코드를
private RewardJoinType? rewardJoinType;
을
c.rewardJoinType = (RewardJoinType?)reader.GetInt16();
... 다른 코드
conn.AddParam("@rewardJoinType", (int?)rewardJoinType);
... 다른 코드 여기
public RewardJoinType? RewardJoinType
{
get { return rewardJoinType; }
set { rewardJoinType = value; }
}
그리고는
public enum RewardJoinType
{
Auto,
Manual
}
때문에하여인가 열거 자체입니다 기본 열거 형은 Int32 및 심지어 t입니다. 내가 nullable Int16을 캐스팅 할 수 없기 때문에 그것을 가지고있어?
우리는 아직 우리의 리더처럼 INT16에 대한 DBNull이 처리는 : 데이터베이스 값이 null의 경우
는 당신이 실제로 돌아갈 것은 '널 (null)'하지 DBNull이의 인스턴스입니다public short GetInt16()
{
columnIndex++;
return reader.IsDBNull(columnIndex) ? (short)0 : reader.GetInt16(columnIndex);
}
어디에서 InvalidCastException이 throw 되는가? 어떤 코드 줄? 그리고 그것은 무엇을 던지려고 노력하고 있습니까? – thecoop
업데이트 됨. 예외에서 유효하지 않은 캐스트 만 표시됩니다. 내면의 예외는 없습니다. 위 참조. – PositiveGuy
아,이 필드는 DB의 TinyInt로 가져 왔습니다. – PositiveGuy