【C#】DataGridViewのFilterでLIKEを使う時のエスケープ

DataGridViewで表示していたデータを、検索内容で絞込み表示しようと思い、BindingSourceのFilterプロパティにクエリ文を設定したところ、例外が発生するパターンがあった。

例外が発生したパターン

以下のようなクエリ文をFilterプロパティにセットした場合。

[COLUMN_NAME] LIKE '%5*5%'

例外エラー

Like 演算子のエラー : 文字列パターン '%5*5%' が無効です。

原因

どうやら、「*」(アスタリスク)が、検索文字列の間にあるとダメみたい。
(アスタリスクで始まる、終わるの場合はエラーにならない)

エラーにならないとしてもワイルドカード扱いになるようで、純粋にアスタリスクを含むデータを検索できない。

対処方法

上記のような特殊な文字をエスケープ文字として検索する。

方法は簡単。「[]」(角括弧、大括弧)で囲むだけ。

[COLUMN_NAME] LIKE '%5[*]5%'

プログラムでFilter文字列を生成している場合は、以下のような感じで修正すればよい。

// string filterStrに検索文字列が入っている場合
filterStr = filterStr.Replace("*", "[*]");
filterStr = filterStr.Replace("%", "[%]");

※アスタリスクの他に、「%」(パーセント)も同様の処理が必要。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください