c# sql ado.net c#-3.0

c# - problema de precisión en DbParameter decimal



sql ado.net (3)

¿Has probado configurar Precisión y Escala ? Tenga en cuenta que debe lanzar primero.

En c #, uso un DbParameter de salida decimal para un procedimiento almacenado en el servidor Sql. Creo un parámetro como ese

DbParameter prm = comm.CreateParameter(); prm.ParameterName = "@Price"; prm.DbType = DbType.Decimal; prm.Direction = ParameterDirection.Output; comm.Parameters.Add(prm); //and set the value of comm.Parameters["@Price"] to a variable, decimal.TryParse(comm.Parameters["@Price"].Value.ToString(), out this.ProdPrice);

Pero el valor del parámetro out siempre se redondea.

Si llamo al mismo procedimiento almacenado desde Sql Server Management Studio, puedo obtener este parámetro correctamente con su precisión

No hay una precisión o propiedades de escala en DbParameter. Y tengo que usar DbParameter en el espacio de nombres System.Data.Common para obtener los datos

¿Cómo puedo recuperar el valor decimal con toda su precisión?

Gracias por adelantado...


Añadiendo a la sugerencia de Marc, puedes cambiar el código a

IDbDataParameter prm = comm.CreateParameter();

El resto del código debería funcionar bien. Las propiedades de Precisión y Escala son "implementación de interfaz explícita" en DbParameter.


Primero, no necesita analizar la cadena para obtener el decimal, debería poder lanzar directamente a él:

this.ProdPrice = (Decimal) comm.Parameters["@Price"].Value;

Dicho esto, ¿cuál es la precisión del parámetro @Price? Creo que SQL Server permite precisión hasta 35 lugares, mientras que la clase Decimal solo proporciona precisión hasta 28 lugares, por lo que si su parámetro tiene más de 28 lugares, no podrá evitar el redondeo.