DataTable.Select Expression, используя IN и Like - PullRequest
1 голос
/ 23 марта 2009

Привет,

У меня есть два вопроса относительно DataTable.Select ():

1) Как избежать потенциальных апострофов или любых других символов, которые могут вызвать проблемы. Меня не беспокоит SQL-инъекция. 2) Как использовать IN с Like и включить результаты с нулевым значением.

1) К сожалению, я не могу найти какой-либо совет по первому варианту, поскольку каждый говорит, что использует параметризованные (это слово) запросы, которые, я уверен, вы не можете сделать с Datatable.select. Ситуация такая, я не знаю, какие значения будут опережать время, так как список извлекается из текстового поля. ('US', 'Engineering', 'Lumburg's'). Я знаю, что мог бы разобрать строку перед передачей ее в select, но я уверен, что есть какой-то ANSI, встроенный для этого, чего, боюсь, нет. знать. Я знаю, что два апострофа подряд избежали бы персонажа, если бы я знал, где он будет расположен, но я не знаю точное местоположение, когда получу его.

2) Хорошо. Теперь для фактического выбора выражения. Что я хочу сделать, так это разрешить пользователю свободно вводить тип формы в текстовое поле. В этом текстовом поле будут использоваться 4 разных столбца для фильтрации. Таким образом, пользователь может ввести несколько элементов, разделенных пробелом, которые затем будут выполнять запрос в соответствии с их критериями. (например, окно поиска iTunes, которое позволяет вам вводить песню альбома произвольной формы и т. д., или вы можете быть конкретны и выполнять поиск только по одному типу элемента)

Я знаю, как сделать IN или Like самостоятельно, но я не уверен, как я мог бы собрать их вместе (включая экранирование апострофов и включая результаты, которые совпадают, но могут иметь ноль в одном из столбцов) и Конечно, сделайте что-нибудь, что поддерживается методом .Select.

ГДЕ (Страна В («США», «Инжиниринг», «Ламбург»)) ГДЕ (Страна НРАВИТСЯ 'LU%')

Таким образом, пользователь в вышеприведенном случае предоставил LU, который должен вернуть запись для Lumburg. Чем больше информации они предоставляют, тем дальше будут уточняться результаты. Есть идеи?

Вот технические характеристики моего приложения:

Winforms VB.NET .Net 2.0

1 Ответ

2 голосов
/ 23 марта 2009

Вы захотите получить запрос, который выглядит следующим образом:

Страна = «США» ИЛИ Страна = «Инженерные» ИЛИ Страна = «Лумбург» ИЛИ Страна «LU%»

terms = //split apart their search entry
foreach (string searchTerm in terms)
{
  // I don't know how you're telling the difference between terms you want an exact
  // match for, and which use like, but do something like this

  if (exactMatchNeeded)
  {
    query += " OR Country = '" + searchTerm.Replace("'", "''") + "' ";
  }
  else
  {
    query += " OR Country LIKE '" + searchTerm.Replace("'", "''") + "' ";
  }
}

Конечно, вам нужно привести это в порядок, чтобы убедиться в таких вещах, как предотвращение лишнего «ИЛИ» в начале, но это должно помочь вам начать.

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