1. ホーム
  2. c#

[解決済み] SQLのLIKE句でSqlParameterを使用することはできません。

2023-05-04 20:41:26

質問

次のようなコードがあります。

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

のように表示されますが、これはうまくいきません。何が間違っているのでしょうか?何か提案はありますか?

どのように解決するのですか?

あなたが欲しいのは

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

(または、そもそも % を含むようにパラメータ値を編集する)。

そうでない場合は、(最初のサンプル)検索で リテラル を検索しているか(arg-valueではない)、クエリに余分な引用符を埋め込んでいるか(2番目のサンプル)です。

ある意味では、TSQL が単に LIKE @SEARCH を使用し、呼び出し側でそれを処理する方が簡単かもしれません。

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

どちらの方法でも良いはずです。