5

我通过以下方式将十进制值发送到存储过程:

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

4

3 回答 3

4

为什么要为 SqlParameter Precision 和 Scale 显式使用 System.Byte?代码应该是这样的:

SqlParameter meh = new SqlParameter("Foo", SqlDbType.Decimal);
meh.Value = 0.00001;
meh.Precision = 12;
meh.Scale = 9;
于 2010-12-22T11:24:00.647 回答
3

我也遇到过这个问题。

微软承认问题的最接近的记录尝试(我发现)在这里:

http://support.microsoft.com/?kbid=892406

不是一个很好的答案,但有助于你的理智。

编辑:我有一个类似的问题,就在昨天发现更新一SqlParameter整天没有任何作用,因为每当我将该参数添加到我的SqlCommand. 相反,SqlParameter在 中编辑SqlCommand以设置您需要的精度:

void parameterCheck(SqlCommand cmd, object value, int index, SqlDbType dataType) {
  cmd.Parameters[index].Value = value;
  if (dataType == SqlDbType.Decimal) {
    cmd.Parameters[index].Precision = 12;
    cmd.Parameters[index].Size = 9;
  }
}
于 2011-06-27T17:47:27.463 回答
0

你为什么将十进制值用引号括起来,把它变成一个字符串?

于 2010-12-22T11:41:04.233 回答