web-dev-qa-db-ja.com

SQL LIKE句でのSqlParameterの使用が機能しない

私は次のコードを持っています:

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

しかし、これもうまくいきません。何が悪いのでしょうか?助言がありますか?

64
nmdr

あなたが欲しいのは:

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

(または、パラメータ値を編集して、最初に%を含めます)。

それ以外の場合は、(最初​​のサンプル)リテラル "@SEARCH"(引数値ではない)を検索するか、クエリに追加の引用符を埋め込みます(2番目のサンプル)。

いくつかの方法で、TSQLにLIKE @SEARCHを使用させ、呼び出し側で処理する方が簡単な場合があります。

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

どちらのアプローチでも機能するはずです。

121
Marc Gravell

代わりに:

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