2017-11-22 20 views
2

SQLサーバークエリのLIKE演算子は、カスタムパターンの一致に非常に役立ちます。ただし、アンパサンドの '%'、アンダースコア '_'、角括弧[[] '']など、一部の文字や部分文字列をエスケープする必要が生じることがあります。Sql ServerのLIKEクエリでエスケープする必要がある文字

確かに私はparametrized queriesですが、例えば、_を検索すると「任意の文字」を意味するため、LIKEの場合は解決しません。

このようなパターンをエスケープするときに考慮する必要がある文字セットとは何ですか?安全なエスケープを行うためにC#関数を提供できますか?

+0

https://stackoverflow.com/questions/19730941/hパラメータ:with-with-use-wildcards-in-sql-query-with- –

+0

この問題は、同じ問題を解決していないようです。私は、エスケープする完全な文字セットを持っています。 –

+0

"引用符は文字ではありません。二重引用符はエスケープする必要はありません。単一引用符は行いますが、1回だけ出現するか何回出現するかは、それがどのようにエスケープされるかに影響を与えません。毎回同じです。 –

答えて

3

%、_、[、]、^をエスケープする必要があります。適切なエスケープ文字、つまりLIKEパターンの別の場所で使用していないエスケープ文字を選択する必要があります。ここ

詳しい説明LIKE (Transact-SQL)

私はあなたがそれを行うために、C#の関数を書くことができます確信しています。

+0

@Starnutoditopo [私のためにうまくいくと思う](https://i.stack.imgur.com/k62eJ.png) –

+0

もちろん、C#でSQL文字列を作成する場合は、コード内で二重引用符をエスケープする必要がありますが、文字列区切り文字が ''であるためSQLクエリウィンドウには表示されません。しかし、それがあなたの問題なのかどうかはわかりません。 – spodger

+0

'[a-z]'でエスケープする必要のある '-'が欠けています。エスケープ文字自体は' ESCAPE'で選択したものです(デフォルトではエスケープ文字はありません)。 –

1

How to use wildcards in SQL query with parameters

がSQLParameter

DONTあなたはSQLインジェクション攻撃を理解していない場合のStringBuilderを使用したり、一緒に

を文字列を追加 https://en.wikipedia.org/wiki/SQL_injection

を使用しています...既存のは、ここに答えるのstackoverflowを参照してください。
+0

これは質問とはまったく無関係です。パラメータ化されたクエリを使用するのは良い習慣ですが、ほとんどのコメントにする必要があります。 –