Ошибка арифметического переполнения при преобразовании числа в тип данных numeric, когда тип данных десятичный (7,6) в SQL Server

#c# #asp.net #sql-server #asp.net-core #asp.net-mvc-4

Вопрос:

Я могу решить эту проблему, когда выбираю тип decimal(5,2) данных .

Тип данных во всех столбцах находится decimal(7,6) в SQL Server.

Класс модели

  public double SM1 { get; set; }
 public double SM2 { get; set; }
 public double SM3 { get; set; }
 public double SM4 { get; set; }
 

Приведение на стороне сервера, выполненное и попытанное преобразовать в десятичное, также не работает, так как я пытаюсь обновить запись. И я получаю ошибку следующим образом :

Ошибка арифметического переполнения при преобразовании числа в тип данных numeric

Код на стороне сервера

  int UpdateSaveProductMargin = cls.fncSaveProductMargin(
                             Convert.ToDecimal(viewModel.SM1),
                             Convert.ToDecimal(viewModel.SM2),
                             Convert.ToDecimal(viewModel.SM3),
                             Convert.ToDecimal(viewModel.SM4));
 

Я не могу изменить тип данных таблицы базы данных, так как несколько приложений подключены к одному и тому же типу данных.

Если я изменю тип данных в коде на стороне сервера на десятичный

Класс модели при обновлении

  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#.

Комментарии:

1. Преобразование в десятичное необходимо только в том случае, если возвращаемый тип является строкой. Если возвращаемый тип-это число, которое вам не нужно преобразовывать.

2. что мне тогда делать? Любое предложение было бы полезно.

3. Каковы некоторые из значений, которые вы пытаетесь преобразовать? decimal(7,6) только дает вам диапазон -9.999999 сквозного 9.999999 .

4. Например , 10 , 20 , 30, 40 .. или если я введу 511321.3223, то он также вернет мне ту же ошибку.

5. Ну, 10 больше, чем 9.999999 так нет, он не поместится в decimal(7,6) @ShanuGarg . (7,6) означает, что вы хотите сохранить 7 цифр точности, причем 6 из них являются шкалой (цифры после десятичной точки). Это означает, что у вас достаточно места для одной значащей цифры и 10.000000 есть 2.