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 + ''%''