我通过以下方式向存储过程发送一个十进制值:
SqlParameter meh = new SqlParameter("Foo", SqlDbType.Decimal);
meh.Value = "0.00001";
meh.Precision = ((System.Byte)(12));
meh.Scale = ((System.Byte)(9));
当我对数据库进行概要分析以查看对其执行的操作时,我看到的参数如下所示:....,@Foo decimal(12,9),....,@Foo=10000,....
它似乎从小数点开始完全镜像,我该如何解决?请注意,我还尝试过先将字符串转换为实际的十进制数,并使用它来设置“meh.Value”,但仍然存在相同的问题。更新
我注意到,如上面的示例所示,原始值的小数点向右移动了9个位置,该值与小数位数完全相同。是什么原因造成的?
再次更新
我应该注意我正在使用Sql Server 2008
最佳答案
为什么将System.Byte显式用于SqlParameter Precision和Scale?代码应该是这样的:
SqlParameter meh = new SqlParameter("Foo", SqlDbType.Decimal);
meh.Value = 0.00001;
meh.Precision = 12;
meh.Scale = 9;