he el siguiente código:El uso de SqlParameter en la cláusula LIKE de SQL no funciona
const string Sql =
@"select distinct [name]
from tblCustomers
left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId
where (tblCustomer.Name LIKE '%@SEARCH%' OR tblCustomerInfo.Info LIKE '%@SEARCH%');";
using (var command = new SqlCommand(Sql, Connection))
{
command.Parameters.AddWithValue("@SEARCH", searchString);
...
}
Esto no funciona, he intentado esto así:
const string Sql =
@"select distinct [name]
from tblCustomers
left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId
where (tblCustomer.Name LIKE @SEARCH OR tblCustomerInfo.Info LIKE @SEARCH);";
using (var command = new SqlCommand(Sql, Connection))
{
command.Parameters.AddWithValue("@SEARCH", "'%" + searchString + "%'");
...
}
pero esto no funciona tan bien . ¿Qué está pasando mal? ¿Alguna sugerencia?
command.Parameters.AddWithValue (" @SEARCH ","% "+ searchString +"% "); Funcionó, las comillas simples adicionales fueron el problema señalado por usted – Ngm
Hacerlo de la segunda manera me parece mejor porque la declaración final se verá realmente ordenada. – Javid
Esto no funcionará correctamente cuando searchString contenga los caracteres '%' '_' o' [', suponiendo que realmente desea buscar uno de esos literales de caracteres. Para una solución al 100%, debe envolver esos caracteres en el searchString entre paréntesis '[]'. El código de C# 'Regex.Replace (searchString, @" ([% _ \ []) ", @" [$ 1] ") hace el truco. –