如何将c#十进制数传递给sql十进制数(4,2)
我正在创建将数据从表单保存到sql表的网页。C#中的一个数据点是十进制。尝试向Sql Server发送时,出现以下错误: “将数据类型转换为数字时出错。” 我能够发送如何将c#十进制数传递给sql十进制数(4,2),c#,sql-server,ado.net,C#,Sql Server,Ado.net,我正在创建将数据从表单保存到sql表的网页。C#中的一个数据点是十进制。尝试向Sql Server发送时,出现以下错误: “将数据类型转换为数字时出错。” 我能够发送SqlDecimal.Null,这很有效。只有当我有一个实际值时,问题才会发生。当Sql值为1.00时,我进行了测试,该值应该很容易放入Sql十进制(4,2) 代码如下: sqlParams.Add(new SqlParameter("hoursPerWeek", SqlDbType.Decimal) { SqlValue =
SqlDecimal.Null
,这很有效。只有当我有一个实际值时,问题才会发生。当Sql值为1.00
时,我进行了测试,该值应该很容易放入Sql十进制(4,2)
代码如下:
sqlParams.Add(new SqlParameter("hoursPerWeek", SqlDbType.Decimal)
{
SqlValue = hoursPerWeek==null ? SqlDecimal.Null : new sqlDecimal((decimal)hoursPerWeek)
});
使用此代码,如果每周小时数为空,则该值将正确保存到数据库中。但是如果值是
1.00
,我就得到了错误。假设sqlParams
是SqlParameterCollection
并且hoursPerWeek
是可以为空的:
原始代码映射到Sql Server上的十进制
类型(它是数值
的同义词),但未指定精度或比例,因此使用与不兼容的精度和比例默认值(4,2)
假设sqlParams
是一个SqlParameterCollection
,hourspeurweek
是可为空的
:
原始代码映射到Sql Server上的decimal
类型(它是numeric
的同义词),但没有指定精度或比例,因此使用了与(4,2)
不兼容的精度和比例默认值,我终于能够让它使用以下内容:
sqlParams.Add(new SqlParameter("hoursPerWeek", hoursPerWeek == null ? (decimal?)null : decimal.Round((decimal)hoursPerWeek, 2)));
我终于能够让它工作了:
sqlParams.Add(new SqlParameter("hoursPerWeek", hoursPerWeek == null ? (decimal?)null : decimal.Round((decimal)hoursPerWeek, 2)));
什么类型是每周小时数Nullable
?是的,hoursPerWeek是Nullable什么类型的hoursPerWeek
Nullable
?是的,hoursPerWeek是NullablesqlParams是一个语法不起作用的列表,但甚至将其转换为sqlParams.Add(新的SqlParameter(“hoursPerWeek”,SqlDbType.Decimal){Precision=4,Scale=2,Value=hoursPerWeek==null?SqlDecimal.null:hoursPerWeek.Value})
不起作用,仍然会出现相同的错误。在执行查询之前,在数据层的下一层中放置一个断点,并在调试器中检查参数值。@JoelCoehoorn:我想您会遇到编译时错误,如:“无法确定条件表达式的类型,因为'System.DBNull'和'decimal'之间没有隐式转换…或者可以使用如下内容:Value=hoursPerWeek???(对象)DBNull.Value;sqlParams是语法不起作用的列表,但甚至可以将其转换为sqlParams.Add(新的SqlParameter(“hoursPerWeek”),SqlDbType.Decimal){Precision=4,Scale=2,Value=hoursPerWeek==null?SqlDecimal.null:hoursPerWeek.Value})
不起作用,仍然会出现相同的错误。在执行查询之前,在数据层的下一层中放置一个断点,并在调试器中检查参数值。@JoelCoehoorn:我想您会遇到编译时错误,如:“无法确定条件表达式的类型,因为'System.DBNull'和'decimal'之间没有隐式转换…或者可以使用如下内容:Value=hoursPerWeek???(对象)DBNull.Value;