Синтаксическая ошибка в обновлении - PullRequest
0 голосов
/ 19 мая 2009

код:

string query1 = @"UPDATE global_mapping set escape_id = " + 
  dataGridView1.Rows[i].Cells[2].Value + ",function_id = " + 
  dataGridView1.Rows[i].Cells[3].Value + ",function_name = '" + 
  dataGridView1.Rows[i].Cells[4].Value + "',parameter_name = '" + 
  dataGridView1.Rows[i].Cells[5].Value + "',parameter_validity = '" + 
  dataGridView1.Rows[i].Cells[6].Value + "',statusparameter_id = " + 
  dataGridView1.Rows[i].Cells[7].Value + ",acb_datatype = '" + 
  dataGridView1.Rows[i].Cells[8].Value + "',data_type_id = " + 
  dataGridView1.Rows[i].Cells[9].Value + ",bit_size = " + 
  dataGridView1.Rows[i].Cells[10].Value + ",validity_status ='" + 
  dataGridView1.Rows[i].Cells[11].Value + "',validity_func = '" + 
  dataGridView1.Rows[i].Cells[12].Value + "'WHERE global_mapping.parameter_id =" + 
  dataGridView1.Rows[i].Cells[1].Value + "";
OleDbCommand cmd1 = new OleDbCommand(query1, conn);
cmd1.ExecuteNonQuery();

код заканчивается:

Когда я выполняю вышеуказанный код, я получаю сообщение об ошибке «Синтаксическая ошибка в операторе обновления» Может кто-нибудь сказать, пожалуйста, как решить эту проблему?

Ответы [ 6 ]

2 голосов
/ 19 мая 2009

Похоже, вам нужно добавить пробел перед предложением WHERE.

Надеюсь, это поможет,

Bill

1 голос
/ 19 мая 2009

Никогда не используйте конкатенацию строк для построения запросов SQL. Используйте параметры SQL.

1 голос
/ 19 мая 2009

Ничего себе. Можем ли мы сказать ... SQL-инъекция?

Попробуйте использовать параметры. Вы не только защитите себя, но и ваш SQL станет НАМНОГО более читабельным.

0 голосов
/ 19 мая 2009

Put Console.WriteLine(query1) до OleDbCommand cmd1 = new OleDbCommand(query1, conn);

См. Значение query1, напечатанное в окне консоли.
Выражение SQL выглядит нормально? Наверное, нет - теперь вы сможете найти поле, которое не является числовым и пустым в сетке.

И используйте параметры, как говорили другие.

0 голосов
/ 19 мая 2009

Я бы сказал, что вы пропустили некоторые кавычки, но ваш код такой скандальный, что я не могу сказать. Если вы не исправите свой код, как минимум, дайте нам дамп query1, чтобы мы могли прочитать ваш фактический запрос.

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

Даже если это локальная «безопасная» база данных, вы должны отказаться от своих вредных привычек сейчас.

0 голосов
/ 19 мая 2009

Хлоп! Пожалуйста, предоставьте окончательное значение query1 и попробуйте отформатировать его, чтобы мы могли получить лучшее представление о нем. Я думаю, что это пропущено или что-то в этом роде.

...