C# パラメータ クエリ SQL を構築する - LIKE %
-
21-08-2019 - |
質問
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("'","?"));
所属していません StackOverflow