Как написать SQL-запрос с пользовательским вводом и подстановочными знаками - PullRequest
2 голосов
/ 23 марта 2010

Обычно я пишу свои операторы where как WHERE key=@0, затем добавляю param. Теперь я хотел бы, чтобы пользователь указывал несколько букв, таких как «овес», и хотел бы прикрепить вокруг него символы подстановки %oat%, что соответствует «покрытие». Итак, как мне написать запрос, чтобы под пользовательским вводом ('seachword') были подстановочные знаки.

Теперь давайте сделаем еще один шаг вперед. Я не хотел бы, чтобы пользователь писал%, поэтому он не может делать бла% бинг. Возможно,% является частью предложения (или оно может быть совершенно незаконным, но я предпочитаю, чтобы оно было частью предложения). Как я могу поместить свои символы под словом или предложением и запретить пользователю ставить подстановочный знак между его словами? (и желательно сделать% часть предложения)

C # ado.net sql / sqlite

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Если вы используете подготовленные операторы (т.е. SQLiteCommand, подкласс DbCommand ), об этом вам позаботятся. E.g.:

using (SqlCommand myCommand = new SQLiteCommand("SELECT * FROM TABLE WHERE (COLUMN LIKE = '%' + @input + '%')"))
{
        myCommand.Parameters.AddWithValue("@input", input);
        // ...
}

Смотрите также этот похожий предыдущий вопрос .

1 голос
/ 23 марта 2010

RE: Как я могу поместить свои символы под словом или предложением и запретить пользователю ставить подстановочный знак между его словами? (и желательно сделать% часть предложения)

Я думаю, вам нужно заменить %, который пользователь поставляет на \%, и использовать

LIKE @Expression ESCAPE '\'
1 голос
/ 23 марта 2010

Продолжайте использовать параметр, но добавьте подстановочный знак в параметр перед привязкой.

C #:

  param = '%' + Regex.Replace(param, @"[%?]", String.Empty) + '%'

SQL:

select * from ... where key like :param
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...