C# 在SQL Server中,当数据类型为十进制(7,6)时,将数字转换为数据类型数字时出现算术溢出错误

C# 在SQL Server中,当数据类型为十进制(7,6)时,将数字转换为数据类型数字时出现算术溢出错误,c#,asp.net,sql-server,asp.net-core,asp.net-mvc-4,C#,Asp.net,Sql Server,Asp.net Core,Asp.net Mvc 4,当我选择数据类型decimal(5,2)时,我能够解决这个问题 在SQL Server中,所有列中的数据类型都是十进制(7,6) 模范班 public double SM1 { get; set; } public double SM2 { get; set; } public double SM3 { get; set; } public double SM4 { get; set; } 服务器端强制转换已完成并尝试转换为十进制也不起作用,因为我正在尝试更新记录。我得到的错误如下:

当我选择数据类型
decimal(5,2)
时,我能够解决这个问题

在SQL Server中,所有列中的数据类型都是十进制(7,6)

模范班

 public double SM1 { get; set; }
 public double SM2 { get; set; }
 public double SM3 { get; set; }
 public double SM4 { get; set; }
服务器端强制转换已完成并尝试转换为十进制也不起作用,因为我正在尝试更新记录。我得到的错误如下:

将数值转换为数据类型数值时出现算术溢出错误

服务器端代码

 int UpdateSaveProductMargin = cls.fncSaveProductMargin(
                             Convert.ToDecimal(viewModel.SM1),
                             Convert.ToDecimal(viewModel.SM2),
                             Convert.ToDecimal(viewModel.SM3),
                             Convert.ToDecimal(viewModel.SM4));
我无法更改数据库表数据类型,因为多个应用程序连接到同一数据类型

如果我将服务器端代码中的数据类型更改为decimal

模型类如果更新

 public decimal SM1 { get; set; }
 public decimal SM2 { get; set; }
 public decimal SM3 { get; set; }
 public decimal SM4 { get; set; } 
然后我的
ModelState.IsValid
返回false,它不会进入写入更新代码的块中


因此,我需要更新记录的更新查询,该查询可以将
decimal(7,6)
转换为
decimal(5,2)
或在C#中强制转换相同的值。

ConvertToDecimal仅在返回类型为字符串时才需要。如果返回类型是一个不需要转换的数字,我该怎么办?任何建议都会很有帮助。您试图转换哪些值<代码>十进制(7,6)仅提供从
-9.9999999
+9.9999999
的范围。例如10、20、30、40。。或者如果我输入511321.3223,它也会返回相同的错误。
10
9.999999
大,所以不,它不适合
十进制(7,6)
@ShanuGarg
(7,6)
表示要存储7位精度,其中6位为刻度(小数点后的数字)。这意味着您有足够的空间容纳一个有效数字,
10.000000
有2个有效数字。