Me pregunto si esto es un error o si voy a hacer algo mal.Excepción de desbordamiento al leer valores decimales de SQL Server
Estoy cargando valores con SqlDataReader
desde una base de datos de SQL Server 2008, pero bajo ciertas circunstancias, no puede convertir los valores SQL en valores .net. (.NET 4.0)
he trazado hacia abajo a un caso de prueba que demuestra el problema real:
Ejemplo de trabajo:
"select convert(decimal(38, 19), 260000) as test"
rs.GetValue(1);
--> returns 260000 (decimal)
exmaple No trabaja:
"select convert(decimal(36, 26), 260000) as test"
rs.GetValue(1);
--> throws
System.OverflowException: Conversion overflows.
at System.Data.SqlClient.SqlBuffer.get_Decimal()
at System.Data.SqlClient.SqlBuffer.get_Value()
at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values)
He examinado los valores reales que retomó SQL Server. Difieren de que el que no funciona usa 4 enteros para expresar el valor, el de trabajo solamente 3.
También revisé el código fuente con el reflector .net que dio a conocer que se lanza una excepción si existe el valor de más luego 3 valores, pero no entiendo la mecánica detrás de ellos.
Entonces, me pregunto si esto es un error genuino en el .NET Framework.
La precisión para los valores decimales es solo hasta 28.Vaya a través del enlace http://stackoverflow.com/questions/745270/c-sharp-sizeof-decimal – praveen
Pero el ejemplo de trabajo incluso utiliza una mayor precisión. – Chuck