Like演算子のエラー:無効な文字列パターン "%XXXX * XXXX%"

datatable.selectのLike演算子のエラー:無効な文字列パターン "%XXXX * XXXX%"

  1. まず、演算子のようなファジークエリの一部のシンボルは、datatable.selectでエスケープまたは置換する必要があります(通常の文字列はSQLで実行できます)。次に例を示します。

    「%xxx *」のように表示された後*、SQLがこれをプレースホルダーと間違え、コンパイル中にエラーが発生するため、[*]に変更する必要があります。

  2. datatable.selectステートメントで挿入または更新する必要のある文字列には、次のように変更する必要のある記号またはキーワードがいくつかあります。次に例を示します。

    1. '。'、 '_'、 '['、 '%'などは '[]'で追加する必要があります。1つのポイントは、文字列に '' '一重引用符がある場合は、 '' ''二重引用符(または2つの単一引用符)に変更されました。データの挿入および更新時に例外は報告されません。

  3. もちろん、SQLにも同様の状況があります。パラメーター化されたsqlparameterメソッドを選択した場合、これらの操作を実行する必要はありません。このメソッドは、SQLインジェクションを効果的に回避します。

解決

  1. Replace( "#"、 "[#]")を使用して、文字列内の*を[*]に置き換えることができます。
  2. 
            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;
            }

     

おすすめ

転載: blog.csdn.net/qq_37192571/article/details/111640916