十进制DbParameter上的精度问题

时间:2009-02-05 00:41:50

标签: c# sql ado.net c#-3.0

在c#中, 我使用十进制输出DbParameter作为Sql Server存储过程。 我创建像

这样的参数
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);

但out参数的值总是四舍五入。

如果我从Sql Server Management Studio调用相同的存储过程,我可以解决这个问题 正确的参数与它的精度

DbParameter上没有精度或比例属性。 我必须在System.Data.Common命名空间上使用DbParameter来获取数据

如何能够以完全精确的方式识别十进制值

提前致谢...

3 个答案:

答案 0 :(得分:4)

根据Marc的建议,您可以将代码更改为

IDbDataParameter prm = comm.CreateParameter();

其余的代码应该可以正常工作。 Precision和Scale属性是DbParameter中的“显式接口实现”。

答案 1 :(得分:2)

您是否尝试过设置PrecisionScale?注意你需要先施展。

答案 2 :(得分:1)

首先,您不需要解析字符串以获取Decimal,您应该能够直接转换为它:

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

话虽如此,@ Price参数的精度是多少?我相信SQL Server允许最多35个位置的精度,而Decimal类只能提供最多28个位置的精度,所以如果你的参数超过28个位置,你将无法阻止舍入。