.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
相关产品推荐
相关产品推荐

