c# - 十进制 DbParameter 的精度问题

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

在 C# 中, 我对 Sql Server 存储过程使用十进制输出 DbParameter。 我这样创建参数


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 来获取数据

我怎样才能完全精确地获取十进制值

提前致谢...

最佳答案

加上Marc的建议,可以把代码改成

IDbDataParameter prm = comm.CreateParameter();

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

关于c# - 十进制 DbParameter 的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514044/

相关文章:

c# - [WPF]如何在 Canvas 上绘制网格?

c# - 将数组中的每个元素相互比较

c# - Entity Framework 生成的 SQL

sql - 这个小于日期的查询有什么问题?

c# - 拆分长文件的最佳方法。编程还是 SQL?

sql-server - ODBC、OLEDB 和 ADO.NET 的底层协议(protocol)有区别吗

c# - 处理 OracleCommand 参数中的空值

sql - 将具有相同含义的两个表合并为一个

.net - 通过 ADO.NET 记录数据库访问

c# - 将枚举转换为另一种类型的枚举