Member 13241999 Ответов: 2

Произошла ошибка при разборе запроса. [ Номер строки токена = 1, смещение строки токена = 115, токен в ошибке = ) ] у меня есть следующая строка кода


SqlCeConnection stock_in = new SqlCeConnection(@"Data Source=C:\\Users\\Prime Computer\\Documents\\Visual Studio 2010\\Projects\\STOCK MANAGEMENT\\STOCK MANAGEMENT\\StockManagement.sdf");

           stock_in.Open();
           SqlCeCommand stock_in_command = new SqlCeCommand("INSERT INTO stock_in(name,code,type,category,price,packing,power,quantity)VALUES('" + comboBox1.SelectedText + "','" + comboBox2.SelectedText + "','" + comboBox3.SelectedText + "','" + comboBox4.SelectedText + "','" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "',)",stock_in);
           stock_in_command.ExecuteNonQuery();
           stock_in.Close();
           MessageBox.Show("RECORD IS SAVED");


Что я уже пробовал:

что не так с моим кодом, я также пытался использовать свойство combobox.text, но все равно оно выдает ту же ошибку

Richard Deeming

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]

Не игнорируйте его. Одна случайная цитата в одном из ваших текстовых полей - случайная или преднамеренная - может разрушить вашу базу данных.

2 Ответов

Рейтинг:
4

Patrice T

Не прямое решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, это уязвимость под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]

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

SqlCeCommand stock_in_command = new SqlCeCommand("INSERT INTO stock_in(name,code,type,category,price,packing,power,quantity)VALUES('" + comboBox1.SelectedText + "','" + comboBox2.SelectedText + "','" + comboBox3.SelectedText + "','" + comboBox4.SelectedText + "','" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "',)",stock_in);

Но иногда может повезти, когда ошибка настолько велика. Поставьте mppl в конце запроса и удалите запятую.


Member 13241999

спасибо, что указали на ошибку запятой, но после удаления запятой она показывает следующую ошибку: "указанная таблица не существует. [ stock_in ] " даже стол есть

Patrice T

Боюсь,я не смогу вам помочь.

Member 13241999

я хочу, чтобы вставить данные в таблице говорят "stock_in" я строю приложение для медицинских магазин, в котором у меня есть ряд форм, и каждая форма с помощью базы данных, которая в моем случае "medicalstoremanagement.ФСР", которые включают в talbes как " продукта,клиента,компании,заказы,акции, акции и т. д. форму/таблицу, для которой я использую вышеуказанный запрос stock_in форме ссылка с ее помощью значений из двух таблиц продукта и поддержки у меня есть ссылка выпадающие списки в поле combobox1, которая использует значение из источника данных имя addproductbindingsource.

Michael_Davies

В приведенном выше комментарии вы называете таблицу stock in не stock_in, как в вашем запросе, если это stock in, то вам нужно использовать квадратные скобки, так как вы используете пробел в имени; [stock in]

Member 13241999

большое спасибо за ваш отчет я сожалею, что он был написан с ошибкой, это stock_in, а не stock in в моей таблице данных нет места, это так же точно, как и в моем запросе

Member 13241999

спасибо за Вашу поддержку Майкл мне очень жаль, что я неправильно написал имя таблицы как stock in infact это то же самое, что и в моем запросе stock_in

Рейтинг:
17

Michael_Davies

Уберите запятую перед закрывающей скобкой, это означает, что есть другое значение, а его нет;

"','" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "',)",stock_in);


Кроме того, пожалуйста, посмотрите на использование параметризованных запросов, а не на конкатенацию строк, оставляя себя открытым для SQL-инъекций, и вам будет труднее найти проблемы, когда они возникнут.


Member 13241999

спасибо, что указали на ошибку запятой, но после удаления запятой она показывает следующую ошибку: "указанная таблица не существует. [ stock_in ] " даже стол есть

Michael_Davies

Вам нужно будет показать схему, чтобы кто-нибудь мог ответить на этот вопрос.

Member 13241999

хммм, вы правы, но, к сожалению, кнопка печати экрана моего ноутбука не работает, Могу ли я иметь ваш whatsapp/imo/facebook, чтобы я мог отправить вам изображение схемы таблицы/ видео

Member 13241999

Ответ измените комментарий. Удалите комментарий.
я хочу, чтобы вставить данные в таблице говорят "stock_in" я строю приложение для медицинских магазин, в котором у меня есть ряд форм, и каждая форма с помощью базы данных, которая в моем случае "medicalstoremanagement.ФСР", которые включают в talbes как " продукта,клиента,компании,заказы,акции, акции и т. д. форму/таблицу, для которой я использую вышеуказанный запрос stock_in форме ссылка с ее помощью значений из двух таблиц продукта и поддержки у меня есть ссылка выпадающие списки в поле combobox1, которая использует значение из источника данных имя addproductbindingsource.