ORA-01756: строка в кавычках неправильно завершена Исключение

1

Делаю инструкцию insert, используя указанный ниже запрос, но выдает исключение в заголовке. Я попытался отладить запрос, но не могу понять, где я ошибаюсь. Я не хочу использовать параметризованный запрос.

OracleCommand cmd = new OracleCommand("INSERT INTO AML_PERCENTAGE_COMPARATOR ( FIRSTNAME, MIDDLENAME, LASTNAME, WHOLENAME, PERCENTAGE ) VALUES ('" + ListOfAML[i].firstName + "','" + ListOfAML[i].middleName + "','" + ListOfAML[i].lastName + "','" + ListOfAML[i].wholeName + "','" + compare + "')");
  • 0
    Как вы думаете, вы должны использовать подготовленное заявление вместо?
  • 1
    Все ли типы столбцов являются символами? Какова стоимость ваших строк? Может быть, один из них включает ' как O'Conner ? Кстати, вы всегда должны использовать параметризованные запросы . Этот тип конкатенации строк открыт для атак SQL-инъекций .
Показать ещё 1 комментарий
Теги:

3 ответа

3
Лучший ответ

nvoigt уже объяснил вашу проблему. Я пытаюсь показать это как пример;

Как я уже сказал, одинарные кавычки имеют особое значение в СУБД SQL. Если вы хотите использовать их в своей команде в виде строкового литерала, вам нужно удвоить их.

Лучший способ справиться с ними с помощью параметризованных запросов. Также такие типы конкатенаций строк открыты для атак SQL Injection.

using(var con = OracleConnection(conString))
using(var cmd = con.CreateCommand())
{
   cmd.CommandText = "INSERT INTO AML_PERCENTAGE_COMPARATOR(FIRSTNAME, MIDDLENAME, LASTNAME, WHOLENAME, PERCENTAGE )
                      VALUES(:firstname, :middlename, :lastname, :wholeName, :compare)";
   cmd.Parameters.AddWithValue("firstname", ListOfAML[i].firstName);
   cmd.Parameters.AddWithValue("middlename", ListOfAML[i].middleName);
   cmd.Parameters.AddWithValue("lastname", ListOfAML[i].lastName);
   cmd.Parameters.AddWithValue("wholeName", ListOfAML[i].wholeName);
   cmd.Parameters.AddWithValue("compare", compare);

   con.Open();
   cmd.ExecuteNonQuery();
}
  • 0
    когда я реализую выше, я получаю ORA-01036: illegal variable name/number
  • 0
    @Lawrence Ops, прости, это была моя вина. Я смешал OracleCommand с OleDbCommand . В OracleCommand , вам нужно использовать : префикс перед вашими именами параметров в вашей команде. Обновил мой ответ на основе этого. Вы также можете прочитать статью « Использование параметров» .
2

Я не хочу использовать параметризованный запрос.

Ну, вот твоя проблема.

Вы можете вставить Athos, Aramis и Portos. Но тогда приходит Дартаньян, и ваше выражение ломается.

Используйте привязку параметров.

0

Если "проблема", то замена ее на "" может помочь, например,

"D'Artagnan".Replace( "'", "''")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню