0

だから私はいくつかの簡単なコードを持っています:

source.Filter = "n LIKE '%" + txtSearch.Text + "%'";

SourceBindingSource オブジェクトです。

txtSearchテキストボックスであること。

の内容を常にtxtSearch.Text文字列と見なし、「(」または他の多くの文字を入力するたびにクラッシュしないようにするための適切な方法は何ですか (まだわかりません)。

確かに、これらすべてをエスケープする関数がどこかにあるはずです。

4

3 に答える 3

0

組み込み関数はありません。ただし、次のように独自の拡張メソッドを作成することもできます。

public static string RemoveSpecialCharacters(this string str)
{
   StringBuilder stringBuilder  = new StringBuilder();
   foreach (char c in str)
    {
      if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') ||
          (c >= 'a' && c <= 'z') || c == '.' || c == '_') 
      {
         stringBuilder.Append(c);
      }
   }
   return stringBuilder.ToString();
}

そしてあなたのコードは

source.Filter = "n LIKE '%" + txtSearch.Text.RemoveSpecialCharacters() + "%'";

ノート:

メソッドの名前を適切なものに変更できます。この名前は、理解を深めるためにのみ使用しています。

于 2013-06-11T15:42:03.610 に答える
0

元のクエリに検索文字列をパラメーターとして含めないのはなぜですか? 私が BindingSource.Filter を使用したのは、存在することがわかっているデータでフィルタリングしたいときだけです。つまり、CheckedListBox に特定の列のすべての可能な値を入力し、ユーザーが表示する値を選択できるようにします。

別の方法は、特殊文字から例外をキャッチし、ユーザーへのメッセージでそれを処理することです。

于 2013-06-11T16:16:12.230 に答える