본문 바로가기

프로그램 경험/.Net

[C#] 변환 오버플로가 발생했습니다.

테이블에 환율 필드를 DECIMAL(36,30) 잡았다.

프로시저 까지는 별 문제없이 작동하는데 닷넷 프로그램에서 조회 하면 오류가 발생한다.


변환 오버플로가 발생했습니다.

위치: System.Data.SqlClient.SqlBuffer.get_Decimal()

위치: System.Data.SqlClient.SqlBuffer.get_Value()

위치: System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)

... 


DECIMAL 사이즈를 (36,28) 로 잡으면 오류가 사라진다.


어떤 사람은 아래와 같이 하면 된다고는 하는데 테스트는 안해봤다.


SqlDataAdapter da = new SqlDataAdapter("SELECT bigDecimal FROM testDecimal", con);

da.ReturnProviderSpecificTypes = true;


출처 : http://social.msdn.microsoft.com/Forums/en-US/f3b4c193-c332-4a99-9c20-cd1c226ec37b/conversion-overflow-with-sqldataadapter?forum=adodotnetdataproviders


몇일뒤... 다시 오류 발생..


자리수 상관없이 총 데이터 길이가 28 이상이 되면 오류가 난다.

SqlServer에서 잡은 데이터 길이와 상관 없이  C# decimal 형식의 데이터 총 길이가 28 이다.

그러니 결국 C#  decimal 형식에 맞게 데이터를 줄여야 한다.