datatable.selectのLike演算子のエラー:無効な文字列パターン "%XXXX * XXXX%"
-
まず、演算子のようなファジークエリの一部のシンボルは、datatable.selectでエスケープまたは置換する必要があります(通常の文字列はSQLで実行できます)。次に例を示します。
「%xxx *」のように表示された後*、SQLがこれをプレースホルダーと間違え、コンパイル中にエラーが発生するため、[*]に変更する必要があります。
-
datatable.selectステートメントで挿入または更新する必要のある文字列には、次のように変更する必要のある記号またはキーワードがいくつかあります。次に例を示します。
-
'。'、 '_'、 '['、 '%'などは '[]'で追加する必要があります。1つのポイントは、文字列に '' '一重引用符がある場合は、 '' ''二重引用符(または2つの単一引用符)に変更されました。データの挿入および更新時に例外は報告されません。
-
-
もちろん、SQLにも同様の状況があります。パラメーター化されたsqlparameterメソッドを選択した場合、これらの操作を実行する必要はありません。このメソッドは、SQLインジェクションを効果的に回避します。
解決
- Replace( "#"、 "[#]")を使用して、文字列内の*を[*]に置き換えることができます。
-
public static void AutoComplete(ComboBox cb, DataTable dt, string filed) { if (cb.Text == "") { return; } cb.Items.Clear(); cb.Items.Add("");//C111-NM-CA+PMMA-0.5+5+2+0.5*47//C111-NM-CA+PMMA-0.5+5+2+0.5[*]47 string condition = cb.Text.Replace("*", "[*]"); condition = cb.Text.Replace("#", "[#]"); condition = cb.Text.Replace("%", "[%]"); DataRow[] drs = dt.Select(filed + @" like '%" + condition.Replace("*", "[*]").Replace("#", "[#]").Replace("%", "[%]") + "%'"); List<string> item_list = new List<string>(); foreach (DataRow dr in drs) { item_list.Add(dr[filed].ToString()); } cb.Items.AddRange(item_list.ToArray()); cb.SelectionStart = cb.Text.Length; cb.Cursor = Cursors.Hand; cb.DroppedDown = true; }