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

时间:2019-05-14 17:20:47

标签: c# sql-server ado.net

我正在创建一个将表单中的数据保存到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,则该值将正确保存到数据库中。
但是,如果值为1.00,则会收到错误消息。

2 个答案:

答案 0 :(得分:2)

假设sqlParamsSqlParameterCollection,而hoursPerWeekNullable<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)));