Использование SqlParameter в SQL like предложение не работает


у меня есть следующий код:

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);
    ...
}

это не работает, я попытался это:

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

но это не работает. Что происходит? Есть предложения?

3   51   2009-03-20 08:58:30

3 ответа:

ты хочешь:

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

(или изменить значение параметра, чтобы включить % в первую очередь).

в противном случае, вы либо (первый образец) ищем литерал "@SEARCH " (не arg-значение), или вы вставляете некоторые дополнительные кавычки в запрос (второй пример).

в некотором смысле, это может быть проще иметь TSQL просто использовать LIKE @SEARCH, и обрабатывать его на вызывающего абонента:

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

любой подход должен работа.

вместо:

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

используйте этот код:

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

вы могли бы сделать LIKE @SEARCH и в вашем коде C#, do

searchString = "%" + searchString + "%"