我有一个简单的 C# 代码来使用
SqlCommand
和 SqlConnection
运行存储过程。该过程的输入参数之一是用户定义的数据类型。其中一列是十进制类型。
在 C# 代码中,我使用数据表发送此参数的值。数据表的列类型与udtt类似,包括小数列。
当我运行代码时,出现此错误:
发送“除数”列中的所有值所需的精度“41”超出了支持的最大精度“38”。这些值必须全部符合单一精度
我的第一反应是检查数据表中是否有任何小数值的精度超过 38。令我惊讶的是,小数列的最大精度值为 32。
我尝试将数据表行分解为较小的集合,以找出导致问题的确切值。当我使用 50 行的集合来执行该过程时,我得到了同样的错误。但是,当我尝试收集 10 行时,所有 10 行收集的过程执行都成功。
我可以使用
decimal.Round()
来避免错误。但这会导致我们的数据出现问题。
有谁知道为什么当我的数据中的最大精度为 32 时 .NET Framework 会抛出精度错误?