Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/88: Рейтинг темы: голосов - 88, средняя оценка - 4.76
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
1

Ошибка при преобразовании типа данных varchar к numeric

23.02.2021, 22:08. Показов 18313. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю UPDATE таблицы Orders, конкретно поле Price(decimal) изPrice.Text, получаю:
Ошибка при преобразовании типа данных varchar к numeric.
Проблема в том что, в этом поле число с запятой, если запятую убирать то "обновляшка" срабатывает, но я же не могу цену в целочисленном типе писать.
Как это победить ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2021, 22:08
Ответы с готовыми решениями:

Ошибка при преобразовании типа данных varchar к real
Пытаюсь обновить запись в БД. Делаю так: double stavka = Convert.ToDouble(textBox3.Text);...

Ошибка при преобразовании типа данных varchar к float
Здравствуйте. Проблема с типами данных при внесении данных в БД из mfc проекта visual studio. В...

Ошибка при преобразовании типа данных varchar к int
Вообщем, есть некая хранимая процедура в SQL: create procedure new_Aut (@InventarizNomer...

Ошибка при преобразовании типа данных varchar к int
Есть 3 таблицы: Покупатели - customer(id,name,city,phone,rating) поставщики -...

24
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
23.02.2021, 22:33 2
7-2-3, вот тут MsGuns расписал, как не надо кодить, вам это тоже полезно Добавление записи в таблицу
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Price.Text
Если Price - это текстбокс, то откройте для себя другие контролы, которые позволяют работать с числами, датой и т.д. Для чисел - NumericUpDown https://docs.microsoft.com/en-... ew=net-5.0
Запрос пишете с параметрами, добавляя параметр так:
C#
1
command.Parameters.AddWithValue(@Price, numericUpDown1.Value);
1
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
23.02.2021, 23:04  [ТС] 3
Так это он мне и написал)
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.02.2021, 23:23 4
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Ошибка при преобразовании типа данных varchar к numeric.
Обратите внимание на Decimalseparator https://docs.microsoft.com/en-... ew=net-5.0

Добавлено через 2 минуты
И просто интересно - Вы в какой стране живете, что у вас копейки есть в ценах ?
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
24.02.2021, 08:50  [ТС] 5
В России, копейки сами по себе конечно не очень нужны, только при расчёте НДС.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
24.02.2021, 10:39  [ТС] 6
Поставил вместо текстбокса:
C#
1
+ "',Price='" + numericUpDown1+
Прикрутил параметр:
C#
1
myCommand.Parameters.AddWithValue("@Price", numericUpDown1.Value);
Теперь немного другое сообщение получаю:
C#
1
2
3
Ошибка арифметического переполнения при преобразовании varchar к типу данных numeric.
 
Выполнение данной инструкции было прервано.
Миниатюры
Ошибка при преобразовании типа данных varchar к numeric  
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
24.02.2021, 10:50  [ТС] 7
NumberFormatInfo-эта штуковина, которая позволяет обходить проблемы с точками и запятыми(которые ещё в региональных настройках сидят) ?

Добавлено через 4 минуты
Попробовал
C#
1
+ "',Price='" + numericUpDown1.Value+
Получил первоначальное сообщение.
Ошибка при преобразовании типа данных varchar к numeric.

Добавлено через 5 минут
Попробовал numericUpDown1.DecimalPlaces, но он мне количество знаков после запятой и показывает, т.е. "2"
0
2851 / 1971 / 367
Регистрация: 14.08.2018
Сообщений: 6,366
Записей в блоге: 4
24.02.2021, 12:03 8
7-2-3, в SQL (MS SQL) строки присваиваются так:
T-SQL
1
SET TextField = 'SomeText'
а числа так:
T-SQL
1
SET NumField = 45.89
Разницу со своей записью видите?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
24.02.2021, 12:10 9
7-2-3, я не вижу на вашем скрине запроса с параметрами. И лучше подкрепляйте свои сообщения кодом(а не скрином), так проще указать на ошибки.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
24.02.2021, 12:16  [ТС] 10
Вот, мой красивый и замечательный кодик:
C#
1
2
3
 SqlCommand myCommand = conn.CreateCommand();
                myCommand = new SqlCommand("UPDATE Orders SET  ProductID='" + ProductID.Text + "',Qty='" + Qty.Text + "',Price='" + numericUpDown1.Value + "' WHERE OrderID='" + OrderID + "' AND LineItem='" + LineItem + "' ", conn);
                myCommand.Parameters.AddWithValue("@Price", numericUpDown1.Value);
0
2851 / 1971 / 367
Регистрация: 14.08.2018
Сообщений: 6,366
Записей в блоге: 4
24.02.2021, 12:29 11
Цитата Сообщение от 7-2-3 Посмотреть сообщение
C#
1
myCommand.Parameters.AddWithValue("@Price", numericUpDown1.Value);
И где в запросе вот этот параметр? И все остальные тоже
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.02.2021, 13:01 12
C#
1
2
3
4
5
6
7
myCommand = new SqlCommand("UPDATE Orders SET  ProductID=@product, Qty=@quant, Price=@price " +
              "WHERE OrderID=@orderid AND LineItem=@lineitem", conn);
myCommand.Parameters.AddWithValue("@product", Int32(ProductID.Text));
myCommand.Parameters.AddWithValue("@quant", Int32(Qty.Text));
myCommand.Parameters.AddWithValue("@price", numericUpDown1.Value);
myCommand.Parameters.AddWithValue("@orderid", Int32(OrderID));
myCommand.Parameters.AddWithValue("@lineitem", LineItem);
1
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
25.02.2021, 14:12  [ТС] 13
Если бы не Price, то моя "обновляшка" бы и без параметров сработала.
Ну я же примерно то же самое в своём коде написал, параметр для Price указать был, остальные просто не стал впихивать.

Но в итоге, VS не нравится это:
Миниатюры
Ошибка при преобразовании типа данных varchar к numeric  
0
2851 / 1971 / 367
Регистрация: 14.08.2018
Сообщений: 6,366
Записей в блоге: 4
25.02.2021, 15:35 14
7-2-3, параметры можно объявлять по другому, это более полная запись, тут явно всё указывается - тип, значения, направление параметра:
C#
1
2
3
4
5
6
7
8
                    SqlParameter param = new SqlParameter
                    {
                        ParameterName = "@idDraw",
                        Value = drawID,
                        SqlDbType = SqlDbType.Int,
                        Direction = ParameterDirection.Input
                    };
                    sqlCommand.Parameters.Add(param);
Добавлено через 2 минуты
7-2-3, и преобразование типов в DataReader:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                    using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
                    {
                        while (dataReader.Read())
                        {
                            draw.IDDraw = (int)dataReader["ID_Draw"];
                            draw.IDGenPlan = (int)dataReader["ID_GenPlan"];
                            draw.DrawNum = dataReader["DrawNum"] as string ?? "";
                            draw.DrawName = dataReader["DrawName"] as string ?? "";
                            draw.Stage = dataReader["Stage"] as string ?? "";
                            draw.StageTEP = (int)dataReader["StageTEP"];
                            draw.Works = dataReader["Works"] as string ?? "";
                        }
                    }
1
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.02.2021, 17:54 15
7-2-3, вместо
Цитата Сообщение от MsGuns Посмотреть сообщение
C#
1
Int32(ProductID.Text)
надо писать
ConvertToInt32(ProductID.Text) или (int)ProductID.Text.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.02.2021, 18:40 16
Igr_ok, Я в курсе: копипаста подвела + невнимательность
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
25.02.2021, 19:46  [ТС] 17
Я видимо что то не так делаю:
Миниатюры
Ошибка при преобразовании типа данных varchar к numeric  
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.02.2021, 23:24 18
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Я видимо что то не так делаю:
"Слепая" копипаста Откуда было известно как называются боксы Вашей формы, из которых извлекаются значения параметров. Вот и получили названия "по смыслу", теперь вместо них подставьте Ваши излюбленные TextBox298, TexBox100500 и т.д.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
26.02.2021, 10:23  [ТС] 19
А вот и нет, я именно проименовал текстбоксы. ProductID.Text(и т.п.), оно так и было.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
26.02.2021, 13:05 20
Скобки уберите вокруг ProductID.Text:
C#
1
  myCommand.Parameters.AddWithValue("@product", (int)ProductID.Text);
0
26.02.2021, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2021, 13:05
Помогаю со студенческими работами здесь

Ошибка при преобразовании типа данных varchar к int
Подскажите в чем дело, пару часов назад таблица работала а теперь выдает ошибку. После того как...

Ошибка арифметического переполнения при преобразовании int к типу данных numeric
SELECT TOP 1 CONVERT(DECIMAL(5,5), Practics) FROM #Subjects WHERE ID = 66 Practics - это INT Этот...

Ошибка при преобразовании типа данных nvarchar к datetime
Пытаюсь выполнить запрос EXEC docWagonPass Null,"2020-06-19 13:40:00:000","2020-06-19...

LINQ to SQL Ошибка при преобразовании типа данных nvarchar к float
Всем доброго времени суток! На сервере есть табличная функция function...

"Ошибка при преобразовании типа данных nvarchar к bigint"
таблица create table поставщик (код_поставщика int not null primary key identity(1,1),...

Обработка ошибок при преобразовании Varchar(max) в XML
Есть представление с данными из ORACLE в MSSql 2012 через линк-сервер. Данные из внешнего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru