You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET decimal值传入SQL Server引发SqlTruncateException问题求助

解决.NET表值参数传递DECIMAL(20,0)时的截断异常

问题根源

你当前创建SqlMetaData时仅指定了SqlDbType.Decimal,未显式设置精度和小数位数。.NET默认会为SqlDbType.Decimal使用精度18、小数位0的配置,这与SQL Server端定义的DECIMAL(20,0)不匹配,导致19位或20位的数值在传递时被截断,触发SqlTruncateException。

解决方案

创建SqlMetaData时,必须显式指定精度(20)和小数位数(0),与SQL Server的列定义完全对齐:

Columns.Add(new SqlMetaData(name, SqlDbType.Decimal, 20, 0));

说明

显式设置精度和小数位数后,.NET端的表值参数列元数据将与SQL Server的DECIMAL(20,0)完全匹配,此时传递19位或20位的decimal数值(如Convert.ToDecimal(81210694789319013214))就不会触发截断异常,18位数值也能正常运行。

内容的提问来源于stack exchange,提问作者Nir-Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:58:12