質問

C#でパラメータクエリ用のSQLを構築しようとしています。 LIKE %% 指示。

これが私が達成しようとしていることです(データベースがFirebirdであることに注意してください)

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME);
 cmd.Parameters.AddWithValue(NAME, "JOHN");

ここで、パラメータを機能させるためにすべての順列を試してみました。

  • を追加すると、 % 文字をパラメータに、

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
    
  • または

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'");
    

これを機能させることができないようです。LIKE クエリを機能させるためにパラメーターを使用するにはどうすればよいですか。

提案は大歓迎です!

役に立ちましたか?

解決

あなたは、クエリ文字列リテラルの内部パラメータを持つことができません。全体の値のパラメータを作成し、文字列にワイルドカードを追加します:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME);
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");

他のヒント

var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME);
Cmd.CommandText = SQL;
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN";

過去にこれをやったときに、私は単に私は、SQLインジェクションに対処するために疑問符を持つ単一引用符を置き換えることを確認して、SQLにそれを統合しました。例えばます:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
  TABLE,
  NAME,
  JOHN.Replace("'","?"));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top