在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来获取数据
如何能够以完全精确的方式识别十进制值
提前致谢...
答案 0 :(得分:4)
根据Marc的建议,您可以将代码更改为
IDbDataParameter prm = comm.CreateParameter();
其余的代码应该可以正常工作。 Precision和Scale属性是DbParameter中的“显式接口实现”。
答案 1 :(得分:2)
答案 2 :(得分:1)
首先,您不需要解析字符串以获取Decimal,您应该能够直接转换为它:
this.ProdPrice = (Decimal) comm.Parameters["@Price"].Value;
话虽如此,@ Price参数的精度是多少?我相信SQL Server允许最多35个位置的精度,而Decimal类只能提供最多28个位置的精度,所以如果你的参数超过28个位置,你将无法阻止舍入。