У меня есть таблица, содержащая продукты. Мне нужно сделать запрос, чтобы найти все совпадающие результаты со значением, введенным пользователем. Я использую SqlParameter
для вставки входных данных.
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Проблема возникает, когда строка пользовательского ввода содержит «_» или «%», поскольку они интерпретируются как специальные символы. С другой стороны, учитывая это:
Командные объекты используют параметры для передачи значений операторам SQL или хранимым процедурам, обеспечивая проверку и проверку типов. В отличие от текста команды, ввод параметра рассматривается как буквальное значение, а не как исполняемый код.
У меня не должно быть таких проблем. Нужно ли мне заменять / экранировать все «_» и «%» во входной строке или есть более элегантное решение. Я хочу, чтобы ввод рассматривался как литерал.
У меня есть несколько записей в таблице, которые содержат специальные символы в имени (N_EW, N\EW, N%EW, N"EW, N'EW). Указание \, "< /strong> и ', поскольку ввод работает нормально (рассматривает их как литералы).
SELECT *FROM [Products]WHERE ProductName LIKE @pattern
Не хватает пробелов - person juergen d   schedule 06.09.2014*
именем столбца, этого не произойдет. Но это всего лишь подсказка для будущих запросов - person juergen d   schedule 07.09.2014