2013-04-25 3 views
0

이전 응용 프로그램에 문제가있어 지원합니다. 데이터 액세스는 CSLA .Net이며 새로 생성 된 엔티티 ID를 out 매개 변수의 값으로 업데이트하는 행이 있습니다. 이것은 데이터베이스에 NUMERIC (10,0)으로 정의됩니다. 코드는 다음과 같습니다.Oracle out 매개 변수 캐스트 - C#

OracleParameter opID = new OracleParameter("P_ID", OracleDbType.Int64); 
//... do some stuff and save the new entity to the db 
_id = (long)opID.Value; 

ODP .Net 9.x 버전의 Windows XP에서는 정상적으로 작동합니다. 최신 버전의 Windows 7 상자에서는 형 변환이 실패하고 Int64로 명시 적으로 선언되었지만 매개 변수의 반환 데이터 형식이 Decimal입니다. ODP .Net의 새 버전에서는 버그/이상한 행동을 좋아합니다. 해결 방법이 있습니까, 아니면 문제를 해결하기 위해 할 수있는 일이 있습니까? 코드를 변경하지 않는 것이 좋습니다.

감사합니다.

+0

대신'Convert.ToInt64'을 사용하지 않으면 다음 두 가지 경우를 모두 처리 할 수 ​​있습니다 : http://msdn.microsoft.com/en-us/library/0c5w856c.aspx –

+0

나는 그것을 사용하게 될 것입니다. 감사합니다! 나는 그것이 도구에 의해 생성 된 것처럼 보이기 때문에 코드를 수정하는 것을 피하려고합니다. 이 시점에서 아무도이 프로젝트의 소유권을 갖고 있지 않은 것처럼 보입니다. 그래서 나는 그것을 그냥 가져 가서 조금만 정리할 수도 있습니다. –

+0

Convert.ToInt64에서 잘못된 캐스트 예외가 발생하여 실패합니다. 'Oracle.DataAccess.Types.OracleDecimal'유형의 객체를 'System.IConvertible'유형으로 변환 할 수 없습니다. Int64로 선언 된 매개 변수가 데이터베이스에서 Decimal 값을 반환하는 이유는 무엇입니까? Int64로 매개 변수 유형을 볼 수 있지만 반환 된 값은 Decimal입니다. –

답변

1

이 문제는 Oracle 포럼에서 자세히 설명합니다 : https://forums.oracle.com/forums/thread.jspa?threadID=406872;

오라클 데이터 유형이 해킹되는 방식에 약간의 변화가있었습니다. 빠른 수정은 이중 캐스트 (long) ((OracleDecimal) opId.Value)를 수행하는 것이 었습니다.

관련 문제