Делаю инструкцию 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 + "')");
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();
}
ORA-01036: illegal variable name/number
OracleCommand
с OleDbCommand
. В OracleCommand
, вам нужно использовать :
префикс перед вашими именами параметров в вашей команде. Обновил мой ответ на основе этого. Вы также можете прочитать статью « Использование параметров» .
Я не хочу использовать параметризованный запрос.
Ну, вот твоя проблема.
Вы можете вставить Athos, Aramis и Portos. Но тогда приходит Дартаньян, и ваше выражение ломается.
Используйте привязку параметров.
Если "проблема", то замена ее на "" может помочь, например,
"D'Artagnan".Replace( "'", "''")
'
какO'Conner
? Кстати, вы всегда должны использовать параметризованные запросы . Этот тип конкатенации строк открыт для атак SQL-инъекций .