Ошибка с оператором C # mySQL INSERT - «У вас ошибка в синтаксисе SQL» - PullRequest
1 голос
/ 30 января 2012

Я получаю ту же расплывчатую ошибку с этим кодом:

command.CommandText = "INSERT INTO database (upc, title, description, quantity) VALUES ('"+ upc.Text +"',"+"'"+titlename+"',"+ "'"+descname+"',"+ "'1'"+"), MyConString";

Ошибка:

{"У вас ошибка в синтаксисе SQL; проверьте руководствокоторая соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с 'база данных (upc, title, description, amount) VALUES (' 016000165779 ',' Betty Crock 'в строке 1 "}

IЯ новичок в C # и пытаюсь создать программу, которая использует коды UPC, которые вставляются в базу данных mySQL.

Ответы [ 5 ]

4 голосов
/ 30 января 2012

Попробуйте это:

command.CommandText = "INSERT INTO tableName " +
                          "(upc, title, description, quantity) " +
                      "VALUES " +
                          "(@upc, @title, @description, @quantity)";

command.Parameters.AddWithValue("@upc", upc.Text);
command.Parameters.AddWithValue("@title", titlename);
command.Parameters.AddWithValue("@description", descname);
command.Parameters.AddWithValue("@quantity", "1");

Примечания:

  • Это исправляет SQL-инъекцию дыру с помощью параметризованных запросов. Особенно там, где я вижу upc.Text, это заставляет меня думать, что ваш конкатенированный ввод пользователя в строку SQL (очень опасно).
  • Я изменил слово "база данных" на "имя таблицы" в вашем запросе. Вот куда идет имя таблицы, а не имя базы данных.
  • Я немного убрал вашу строковую декларацию, чтобы ее было легче читать =)
3 голосов
/ 30 января 2012

Почему у вас есть ", MyConString" в конце вашего запроса? Это кажется странным.

Кроме того, database, вероятно, не является именем вашей таблицы .

3 голосов
/ 30 января 2012

database может быть зарезервированным словом.Попробуйте убрать его с помощью обратных галочек:

INSERT INTO `database` ...

Я также не уверен, почему часть , MyConString находится внутри самого запроса, но я не эксперт по C #.

1 голос
/ 30 января 2012

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

Это список ключевых слов mysql: MySql Зарезервированные ключевые слова , в будущем старайтесь избегать использования ключевых слов.

    command.CommandText = "INSERT INTO [database] (upc, title, description, quantity) VALUES (@upc,@title ... ) 
command.Parameters.AddWithValue("@upc","upcValue");
command.Parameters.AddWithValue("@title","titleValue");
0 голосов
/ 30 января 2012

Я думаю, вам не хватает двойной кавычки в конце перед комой:

"+") ", MyConString ";

...