Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将c#十进制数传递给sql十进制数(4,2)_C#_Sql Server_Ado.net - Fatal编程技术网

如何将c#十进制数传递给sql十进制数(4,2)

如何将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 =

我正在创建将数据从表单保存到sql表的网页。C#中的一个数据点是十进制。尝试向Sql Server发送时,出现以下错误:

“将数据类型转换为数字时出错。”

我能够发送
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;