Как? Параметры и LIKE оператор SQL - PullRequest
76 голосов
/ 30 октября 2008

Я пишу функцию поиска и продумал этот запрос, используя параметры для предотвращения или, по крайней мере, ограничения атак с использованием SQL-инъекций. Однако, когда я запускаю его через мою программу, он ничего не возвращает:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

Можно ли использовать параметры следующим образом? или они действительны только в экземпляре, таком как:

SELECT * FROM compliance_corner WHERE body LIKE '%<string>%' (где <string> - объект поиска).

РЕДАКТИРОВАТЬ: я создаю эту функцию с VB.NET, это влияет на синтаксис, который вы, ребята, внесли?

Кроме того, я запустил этот оператор в SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE% max% ') `, и он возвращает результаты.

Ответы [ 6 ]

108 голосов
/ 30 октября 2008

Ну, я бы пошел с:

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")
76 голосов
/ 30 октября 2008

Ваш визуальный базовый код будет выглядеть примерно так:

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)
25 голосов
/ 30 октября 2008

нужно сделать:

LIKE '%' + @param + '%'

1 голос
/ 13 декабря 2010

Иногда символ, используемый в качестве заполнителя %, не является тем же, если вы выполняете запрос из VB, как при выполнении его из MS SQL / Access. Попробуйте изменить символ заполнителя с % на *. Это может сработать.
Однако, если вы отлаживаете и хотите скопировать строку SQL непосредственно в MS SQL или Access, чтобы проверить ее, вам, возможно, придется изменить символ обратно на % в MS SQL или Access, чтобы фактически вернуть значения.

Надеюсь, это поможет

1 голос
/ 30 октября 2008

Возможно, вам придется объединить знаки% с вашим параметром, например:

LIKE '%' || @query || '%'

Edit: На самом деле, это может не иметь никакого смысла вообще. Я думаю, что, возможно, неправильно понял вашу проблему.

0 голосов
/ 01 августа 2017

попробуйте так же

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE CONCAT('%',@query,'%')  OR  title LIKE CONCAT('%',@query,'%') )")
cmd.Parameters.Add("@query", searchString)
cmd.ExecuteNonQuery()

Используется Конкат вместо +

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