我正在创建一个将表单中的数据保存到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)
});
使用此代码,如果hoursPerWeek
为null
,则该值将正确保存到数据库中。
但是,如果值为1.00
,则会收到错误消息。
答案 0 :(得分:2)
假设sqlParams
是SqlParameterCollection
,而hoursPerWeek
是Nullable<decimal>
:
sqlParams.Add("@hoursPerWeek", SqlDbtype.Decimal, 4, 2).Value = hoursPerWeek == null ? DBNull.Value : hoursPerWeek.Value;
原始代码映射到Sql Server上的decimal
类型(它是numeric
的同义词),但是没有指定精度或小数位数,因此使用默认的精度和小数位数的默认值与(4,2)
兼容。
答案 1 :(得分:0)
我终于能够使用它:
sqlParams.Add(new SqlParameter("hoursPerWeek", hoursPerWeek == null ? (decimal?)null : decimal.Round((decimal)hoursPerWeek, 2)));