varios values valores uso por parametro operador not multiple iniciales consulta con buscar sql dapper

sql - values - ¿Dapper es compatible con el operador like?



sql like multiple values (4)

La mejor forma de usar esto para agregar la función concat en la consulta, ya que también se guarda en la inyección sql, pero la función concat solo es compatible por encima de sql 2012

string query = "SELECT * from country WHERE Name LIKE CONCAT(''%'',@name,''%'');" var results = connection.query<country>(query, new {name});

Usando Dapper-dot-net ...

Lo siguiente no produce resultados en el objeto de datos:

var data = conn.Query(@" select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like ''%@T%''", new { T = (string)term });

Sin embargo, cuando uso un formato de cadena normal como:

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like ''%{0}%''", term); var data = conn.Query(QueryString);

Obtengo 25 filas en la colección. ¿Dapper no está analizando correctamente el final del parámetro @T ?


La respuesta de Sam no funcionaba para mí, así que después de algunas pruebas se me ocurrió usar el equivalente SQLite CONCAT que parece funcionar:

string sql = "SELECT * FROM myTable WHERE Name LIKE ''%'' || @NAME || ''%''"; var data = IEnumerable data = conn.Query(sql, new { NAME = Name });


Sí lo hace. Esta solución simple me ha funcionado siempre:

db.Query<Remitente>("SELECT * FROM Remitentes WHERE Nombre LIKE @n", new { n = "%" + nombre + "%" }) .ToList();


Tratar:

term = "whateverterm"; var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]"); string term = "%" + encodeForLike(term) + "%"; var data = conn.Query(@" select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like @term", new { term });

No hay nada especial acerca de los operadores similares, nunca desea que sus parámetros estén dentro de los literales de cadena, no funcionarán, sino que se interpretarán como una cadena.

Nota

Se desaconseja enérgicamente el ejemplo codificado en su segundo fragmento, además de ser un gran problema con la inyección de sql, puede provocar que el apresurador tenga fugas.

advertencia

Cualquier coincidencia like que lidere con un comodín no es SARGable, lo que significa que es lenta y requerirá un escaneo de índice.