dbに天びんを保存するストアドプロシージャがあります。SqlTruncateException:数値演算によって切り捨てが発生する
SqlTruncateException:数値計算は、切り捨てが発生し
今日は、例外が発生しました。
私たちは10億を超える残高を受け取ったため、この例外が発生しました。このような巨大な価値が間違っているかどうかは気にしませんが、SqlCientの奇妙な動作の理由を知りたいと思います。
public class LoroAccountBalance
{
...
public decimal? Balance { get; set; }
...
}
ユーザー定義テーブル型にマップされます:
create type Settlement.LoroBalanceType as table
(
...
Balance money not null,
...
)
だから、.NET decimal
タイプがmoney
をSQLにマッピングされている
は、私たちは、残高のコレクションを渡します。
ここは、スタックトレースの最後のステップです:!
のSystem.Data.dll System.Data.SqlTypes.SqlDecimal.ConvertToPrecScale(System.Data.SqlTypes.SqlDecimal nは、int型の精度、int型のスケール)
SqlClientは、小数点精度を金型に変換する前に調整することを決めました。
しかし、この値はprecision
に対して選択され、1bは適合しません。
なぜ彼がそうしているのか理解したいと思います。 docsに説明が見つかりませんでした。
どのようにして 'decimal'値をサーバーに渡しますか? – Luaan
@Luan残高のコレクションをIDataReaderに変換し、タイプとして渡します。構造化 –
ここで問題を特定したかどうかはわかります; –