Не удается найти ошибку запроса вставки MySql.Data.MySqlClient.MySqlException

Это сообщение об ошибке

MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')' at line 1'

это мой запрос

MySqlCommand cmd = new MySqlCommand("insert into subject(id, code, title, unit) values('" + textBox1.Text + "',''" + textBox2.Text + "',''" + textBox3.Text + "',''" + textBox4.Text + "')", conn);

Я просматривал это уже более часа, но все еще получаю эту ошибку

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

Bill Karwin 30.03.2021 08:17

Вы проверили, что полученный запрос, сформированный после выполнения этой строки, является правильным? Поскольку я вижу здесь + " ',' ' " +, в предоставленном запросе не совпадают одинарные кавычки.

Rakhi Agrawal 30.03.2021 08:19

Привет @Vince Garcia, рекомендуется использовать Параметризованный запрос, так как это упростит добавление значений в запрос, а также предотвратит SQL-инъекция

Yong Shun 30.03.2021 08:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кроме того, для ответа @ Kazi на исправление неправильного запроса.

В качестве альтернативы рекомендуется использовать Параметризованный запрос.

ОБНОВЛЕНО: Как было предложено @CodeCaster для проблем, упомянутых в статье Прекратить использование AddWithValue (), я переключаю все AddWithValue() на Add("@Parameter", SqlDbType).Value

MySqlCommand cmd = new MySqlCommand("insert into subject(id, code, title, unit) values(@ID, @Code, @Title, @Unit)", conn);
cmd.Parameters.Add("@ID", SqlDbType.int).Value = textBox1.Text;
cmd.Parameters.Add("@Code", SqlDbType.Varchar, 10).Value = textBox2.Text;
cmd.Parameters.Add("@Title", SqlDbType.NVarchar, 50).Value = textBox3.Text;
cmd.Parameters.Add("@Unit", SqlDbType.Varchar).Value = textBox4.Text;

А также убедитесь, что значение, которое вы передаете с SqlDbTypeдолжен соответствовать типу данных как соответствующему столбцу таблицы базы данных.

Причины использования параметризованного запроса:

  1. Это упрощает запрос при передаче параметров и делает запрос более читаемым.
  2. Предотвратить SQL-инъекция.

Ссылка: Подготовить заявление MySQL

Другие вопросы по теме