5

次の方法で10進値をsprocに送信しています。

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,....

小数点から完全にミラーリングされているようですが、どうすれば修正できますか?また、最初に文字列を実際の10進数に変換し、それを使用して'meh.Value'を設定しようとしましたが、それでも同じ問題が発生することに注意してください。

更新しました

上記の例のように、元の値の小数点が9桁右にシフトしていることに気付きました。これは、スケールとまったく同じ値です。これは何が原因でしょうか?

再度更新

SqlServer2008を使用していることに注意してください

4

3 に答える 3

4

SqlParameter の精度とスケールに 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

私もこの問題に遭遇しました。

問題を認めようとする Microsoft による最も近い文書化された試み (私が見つけたもの) は次のとおりです。

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

素晴らしい答えではありませんが、正気を保つのに役立ちます。

編集:私は同様の問題を抱えていて、昨日SqlParameter、そのパラメーターをに追加するたびに失われたため、一日中更新しても何も起こらないことがわかりましたSqlCommandSqlParameter代わりに、内のを編集して、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

10進値を引用符で囲んで文字列に変換するのはなぜですか?

于 2010-12-22T11:41:04.233 に答える