Как передать десятичное число c # в десятичное sql (4,2) - PullRequest
0 голосов
/ 14 мая 2019

Я создаю веб-страницу, которая сохраняет данные из формы в таблицу SQL. Одна из точек данных в C # является десятичной. Когда я пытаюсь отправить на сервер Sql, я получаю эту ошибку:

"Ошибка преобразования типа данных числового в числовой."

Я могу отправить 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)
});

С этим кодом, если hoursPerWeek равно null, значение должным образом сохраняется в БД.
Но если значение 1.00, я получаю ошибку.

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Предполагается, что sqlParams является SqlParameterCollection, а hoursPerWeek является Nullable<decimal>:

sqlParams.Add("@hoursPerWeek", SqlDbtype.Decimal, 4, 2).Value = hoursPerWeek  == null ? DBNull.Value : hoursPerWeek.Value;

Исходный код сопоставлен с типом decimal на Sql Server (который является синонимом numeric), но не указывает точность или масштаб, поэтому используются значения по умолчанию для точности и масштаба, которые не совместимы с (4,2).

0 голосов
/ 14 мая 2019

Мне наконец удалось заставить его работать с этим:

sqlParams.Add(new SqlParameter("hoursPerWeek", hoursPerWeek == null ? (decimal?)null : decimal.Round((decimal)hoursPerWeek, 2)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...