86

次のコードがあります。

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

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

4

4 に答える 4

176

あなたが望むものは:

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

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

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

いくつかの点で、TSQL で を使用するだけLIKE @SEARCHで、呼び出し元で処理する方が簡単な場合があります。

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

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

于 2009-03-20T06:02:02.290 に答える
9

使用する代わりに:

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 + '%');";
于 2016-09-10T07:42:01.350 に答える
6

AddメソッドとAddWithValueメソッドのわずかな違いに注意してください。Addメソッドを使用して間違ったSqlTypeパラメータを指定すると、以下の問題が発生しました。

  • ncharUnicode文字をnvarchar格納できます。
  • charUnicode 文字を格納することはできませんvarchar

例えば:

string query = " ... WHERE stLogin LIKE @LOGIN ";

SqlParameter p = new SqlParameter("@LOGIN", SqlDbType.Char, 255) 
{ 
    Value = "%" + login + "%" 
};

command.Parameters.AddWithValue(p.ParameterName, p.Value); //works fine!!!

command.Parameters.Add(p); // won't work

SqlTypeNVarCharに変更すると、2 つの方法がうまく機能しました。

SqlParameter p = new SqlParameter("@LOGIN", SqlDbType.NVarChar, 255) 
{ 
    Value = "%" + login + "%" 
};

command.Parameters.AddWithValue(p.ParameterName, p.Value); //worked fine!!!

command.Parameters.Add(p); //worked fine!!!
于 2019-01-31T13:00:45.087 に答える
-7

あなたはできるしLIKE @SEARCH、あなたのC#コードで、

searchString = "%" + searchString + "%"
于 2009-03-20T06:18:01.800 に答える