Comment? Paramètres et instruction SQL LIKE

J’écris une fonction de recherche et j’ai pensé à cette requête en utilisant des parameters pour empêcher, ou du moins limiter, les attaques par injection SQL. Cependant, quand je le lance dans mon programme, il ne retourne rien:

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

Les parameters peuvent-ils être utilisés comme ça? ou sont-ils uniquement valables dans un cas tel que:

SELECT * FROM compliance_corner WHERE body LIKE '%%' (où est l’object de recherche).

EDIT: Je construis cette fonction avec VB.NET, cela a-t-il un impact sur la syntaxe à laquelle vous avez consortingbué?

J’ai également exécuté cette instruction dans SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE % max% ‘) `et qui renvoie des résultats.

Votre code visuel de base ressemblerait à ceci:

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

Eh bien, j’irais avec:

  Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchSsortingng +"%") 

tu dois faire:

LIKE '%' + @param + '%'

Vous devrez peut-être concaténer les signes% avec votre paramètre, par exemple:

LIKE ‘%’ || @query || ‘%’

Edit: En fait, cela n’a aucun sens. Je pense que j’ai peut-être mal compris votre problème.

Parfois, le symbole utilisé comme espace réservé % n’est pas le même si vous exécutez une requête à partir de VB que lorsque vous l’exécutez à partir de MS SQL / Access. Essayez de changer votre symbole d’espace réservé de % à * . Cela pourrait fonctionner.
Toutefois, si vous déboguez et souhaitez copier votre chaîne SQL directement dans MS SQL ou Access pour la tester, vous devrez peut-être remplacer le symbole par % dans MS SQL ou Access afin de renvoyer des valeurs.

J’espère que cela t’aides

essayez aussi de cette façon

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

Concat utilisé au lieu de +