如何将C#十进制传递给SQL小数(4,2)



我正在创建网页,将数据从表单保存到SQL表。C#中的数据点之一是十进制。当我尝试将其发送到SQL Server时,我会收到此错误:

"错误将数据类型数字转换为数字。"

我能够发送SqlDecimal.Null,这有效。问题只有在我有实际值时才发生。我在SQL值为1.00时测试了,该值应轻松适合SQL decimal(4,2)

这是代码:

sqlParams.Add(new SqlParameter("hoursPerWeek", SqlDbType.Decimal)
{
   SqlValue = hoursPerWeek==null ? SqlDecimal.Null : new sqlDecimal((decimal)hoursPerWeek)
});

使用此代码,如果hoursPerWeeknull,则将值正确保存到DB。
但是,如果值为 1.00,我会得到错误。

假设sqlParamsSqlParameterCollectionhoursPerWeekNullable<decimal>

sqlParams.Add("@hoursPerWeek", SqlDbtype.Decimal, 4, 2).Value = hoursPerWeek  == null ? DBNull.Value : hoursPerWeek.Value;

SQL Server上映射到decimal类型的原始代码(这是numeric的同义词(,但未指定精度或比例,因此使用默认值用于与(4,2)不兼容的精度和比例。

我终于能够与此使用:

sqlParams.Add(new SqlParameter("hoursPerWeek", hoursPerWeek == null ? (decimal?)null : decimal.Round((decimal)hoursPerWeek, 2)));

最新更新