Обновление таблицы из C # Winforms не работает - PullRequest
2 голосов
/ 05 февраля 2011

Я получаю это сообщение об ошибке:


--------------------------- У вас ошибка в синтаксисе SQL; проверить руководство, которое соответствует вашему MySQL версия сервера для правильного синтаксиса используйте рядом с '(title) VALUES (hi)' в строке 1

--------------------------- OK

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

Примечание. Значения внутри свойства текста элементов управления текстового поля, перечисленных ниже, представляют собой просто текст, все буквы и цифры.

try
            {
                label1.Text = "Trying to save. Wait.";
                conn.Open();
                string sql = "UPDATE " + pagelist.Text + "SET " + itemlist.Text + "=" + sitetext.Text;
                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);
                cmd.ExecuteNonQuery();
            }
            catch (Exception en)
            {
                MessageBox.Show(en.Message);
            }

О таблице:

Таблица имеет 3 столбца «заголовок, заголовок и текст». все varchars и длина каждого 255

Может кто-нибудь помочь мне выяснить, что в этом плохого? Любая помощь приветствуется.

Спасибо

Ответы [ 5 ]

3 голосов
/ 05 февраля 2011

Я думаю, что вы забыли пробел до SET.
Если это текстовое, а не числовое поле, вы должны также заключить значение в одинарные кавычки.
Но, пожалуйста, выбросьте этот код и напишите другой, который использует параметры .

3 голосов
/ 05 февраля 2011

В дополнение к предложению Митча я бы также обернул объекты conn и cmd в блоки:

using ( var conn = new Connection( connString ) )
{
  conn.Open();
  var sql = "my sql";
  using( var cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn) )
  {
    cmd.ExecuteNonQuery();
  }
}

Это обеспечит надлежащее освобождение ресурсов, закрытие соединений и т. Д.

Вот SO-ответ, касающийся использования параметризованных запросов: Параметризованный запрос для MySQL с C #

3 голосов
/ 05 февраля 2011

Вам нужно заключить в кавычки значения:

string sql = 
 "UPDATE " + pagelist.Text + " SET " + itemlist.Text + " = '" + sitetext.Text + "'";     

Еще лучше, используйте параметризованный запрос, чтобы избежать атак SQL-инъекций.

2 голосов
/ 05 февраля 2011

Строковые литералы должны быть заключены в кавычки и правильно экранированы при использовании непосредственно в запросе, но здесь это будет неправильным вариантом; поскольку вы не можете доверять вводу, вы должны использовать параметр в назначении. В зависимости от провайдера это может означать ... = ? или ... = @argName и т. Д. - и добавление значения в коллекцию .Parameters объекта вашей команды.

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

0 голосов
/ 05 февраля 2011

проверьте синтаксис

Обновление синтаксиса:

Обновить имя таблицы, установить feildname = значение, где условие;

вы используете это правильно?

если вы передаете строку, передайте ее в одинарных кавычках

Остерегайтесь инъекций sql!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...