c #: как правильно выполнять поиск в sql LIKE, используя любые символы - PullRequest
0 голосов
/ 17 февраля 2009

Я строю (c #) строки команд sql select на лету, используя условия LIKE% somestring%. В моих строках поиска я хочу иметь возможность обрабатывать любой символ, найденный на стандартной клавиатуре ПК (США) (включая ~! @ #% И т. Д., Alt-специальные символы не требуются, но было бы неплохо иметь). Я знаю, что одинарные кавычки должны быть удвоены, а возможно и двойные. Какие другие строковые исправления могут потребоваться для обеспечения правильного синтаксиса?

Ответы [ 2 ]

5 голосов
/ 17 февраля 2009

Исправлений не требуется:

SqlCommand cmd = new SqlCommand("select * from Foo where Bar like @p", connection);

SqlParameter p  = new SqlParameter();
param.ParameterName = "@p";
param.Value = pattern;

cmd.Parameters.Add(param);
2 голосов
/ 17 февраля 2009

Помимо удвоения одинарных кавычек (или использования параметризованного запроса), пользователь узнает, что "_" и "%" являются подстановочными знаками (любой символ и ноль или больше любых символов соответственно), и что «[...]» создает замыкание?

Чтобы убежать от этих персонажей, есть два маршрута

WHERE Foo LIKE '%xxx\%yyy%' ESCAPE '\'

или ГДЕ Foo LIKE '% xxx [%] гггг%'

второй использует побочный эффект создания замыкания и избегает необходимости использовать ESCAPE (который сам по себе требует некоторой мысли, чтобы выбрать символ, который не конфликтует с остальной частью строки или сам по себе экранируется там, где это происходит) )

Обратите внимание, что использование 'LIKE% somestring%' обычно требует сканирования таблицы и, следовательно, может привести к проблемам с производительностью - например, если у вас есть миллионы строк для проверки.

В SQL Server вы можете использовать sp_ExecuteSQL, если вы генерируете предложения WHERE путем конкатенации строк, так что включаются только поля, для которых пользователь задает критерии. sp_ExecuteSQL кеширует запрос и, в большинстве случаев, повышает производительность. (спросите, если это актуально, и вам нужна помощь)

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