본문 바로가기
백엔드/데이터베이스에러

지정한 캐스트가 잘못되었습니다

by 1005ptr 2018. 6. 21.
반응형

오라클 Number컬럼과 C# iBatis float 사이에 타입 캐스팅에 오류 발생

내가 짠게 아니라 이거 되는거냐 확인해보니 된다는 대답

나는 만진게 없는데 float에서 에러가나는데 왜그럴까 오래 고민했다

InnerException을 미리미리 열어봤어야 했는데...

IBatis에서 이쪽이 float니까 넘어오는걸 Float라 생각하고 GetFloat를 호출하는 것 같다


자료형을 float에서 Oracle의 Number에 대응되는 Decimal로 변경하면 정상 동작하는걸 확인했지만

사용하는 라이브러리에서 float형을 사용하기 때문에 매우 빈번히 호출되는거라 변경할 수가 없는 상태


현재는 필요없는 값이라 그냥 쿼리에서 주석처리했다


- 추가 -

다른 컴퓨터에서는 정상 동작하는데 내 컴퓨터에서만 이런에러가 발생해서 확인해보니

회사에서 사용하는 오라클 버전과 내가 사용하는 오라클 버전이 달라서 생긴 문제였다.

그래서 그냥 매니지드 버전으로 변경함.

내버전은 11.2.0.1.0


출처 : https://ibatis.apache.org/docs/dotnet/datamapper/ch03s07.html

CLR TypeiBATIS supportSqlDbTypeOleDbTypeOdbcTypeOracleType
Byte[]YesBinary, Image, VarBinaryBinary, VarBinaryBinary, Image, VarBinaryRaw
Boolean, bool?YesBitBooleanBitByte
Byte, byte?YesTinyInt-TinyIntByte
DateTime, DateTime?YesDateTime, SmallDateTimeDateDate, DateTime, SmallDateTime, TimeDateTime
char, char?YesNot supportedCharCharByte
Decimal, decimal?YesDecimal, Money, SmallMoneyDecimal, Currency, NumericDecimal, NumericNumber
Double, double?YesFloatDoubleDoubleDouble
Guid, Guid?YesUniqueIdentifierGuidUniqueIdentifierRaw
Int16, Int16?YesSmallIntSmallIIntSmallIntInt16
Int32, Int32?YesIntIntegerIntInt32
Int64, Int64?YesBigIntBigIntBigIntNumber
Single, Single?YesRealSingleRealFloat
StringYesChar, Nchar, NVarchar, Text, VarCharChar, VarCharChar, NChar, NText, NVarChar, Text, VarCharNVarChar, VarChar
TimeSpanNoNot supportedDBTimeTimeDateTime
UInt16, UInt16?yesInt--UInt16
UInt32, UInt32?yesDecimal--UInt32
UInt64, UInt64?yesDecimal--Number



반응형

댓글