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("%", "[%]");
※アスタリスクの他に、「%」(パーセント)も同様の処理が必要。