paginas pages net mvc introducción introduccion filtro español busqueda asp aplicacion asp.net sql vb.net

asp.net - pages - paginas razor



¿Cómo? Parámetros y declaración LIKE SQL (6)

Estoy escribiendo una función de búsqueda y he pensado en esta consulta utilizando parámetros para evitar, o al menos limitar, ataques de inyección SQL. Sin embargo, cuando lo ejecuto a través de mi programa, no devuelve nada.

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

¿Se pueden usar parámetros como este? o solo son válidos en una instancia como:

SELECT * FROM compliance_corner WHERE body LIKE ''%<string>%'' (donde <string> es el objeto de búsqueda).

EDITAR: Estoy construyendo esta función con VB.NET, ¿tiene eso un impacto en la sintaxis que ustedes han contribuido?

Además, ejecuté esta declaración en SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE ''%max%'') OR (title LIKE % max% '') `y que devuelve resultados.


A veces, el símbolo utilizado como marcador de posición % no es lo mismo si ejecuta una consulta de VB como cuando lo ejecuta desde MS SQL / Access. Intente cambiar el símbolo de marcador de posición de % a * . Aquello podría funcionar.
Sin embargo, si depura y desea copiar su cadena SQL directamente en MS SQL o Access para probarla, es posible que tenga que volver a cambiar el símbolo a % en MS SQL o Access para devolver valores.

Espero que esto ayude


Bueno, iría con:

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


Puede que tenga que concatenar los signos% con su parámetro, por ejemplo:

ME GUSTA ''%'' || @query || ''%''

Editar: en realidad, eso puede no tener ningún sentido en absoluto. Creo que puedo haber entendido mal tu problema.


Su código visual básico se vería así:

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


intenta también de esta manera

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()

Concat utilizado en lugar de +


tu tienes que hacer:

LIKE ''%'' + @param + ''%''