El uso de SqlParameter en la cláusula SQL LIKE no funciona


Tengo el siguiente código:

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 también:

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? Alguna sugerencia?

Author: davmos, 2009-03-20

3 answers

Lo que quieres es:

tblCustomerInfo.Info LIKE '%' + @SEARCH + '%'

(o edite el valor del parámetro para incluir el % en primer lugar).

De lo contrario, está o bien (primera muestra) buscando el literal "@SEARCH" (no el valor arg), o está incrustando algunas comillas adicionales en la consulta (segunda muestra).

De alguna manera, podría ser más fácil que el TSQL solo use LIKE @SEARCH, y lo maneje en la persona que llama:

command.Parameters.AddWithValue("@SEARCH","%" + searchString + "%");

Cualquiera de los dos enfoques debería funcionar.

 94
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-20 06:02:02

En lugar de usar:

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%');";

Utilice este código:

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 + '%');";
 3
Author: Ali Almasian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-10 07:42:01

Podrías hacer LIKE @SEARCH y en tu código C#, hacer

searchString = "%" + searchString + "%"
 -3
Author: Charles Graham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 22:10:51