0

Like.NetアプリケーションでいくつかのSQLServerクエリ(制御できない)を渡すというわずかな問題があり、データベースのリテラルにするためにいくつかの文字をエスケープする必要があります。

たとえば、クエリしようとしているフィールドが次のようになっているとします。

This_is [a] long_text field with [literal] characters in it

そして、私のクエリは次のようになります。

SELECT * FROM [MyTable] where [MyField] Like 'This_% [literal]%'

これでデータが取得されるはず_です。課題は、SQL Serverでと[文字がリテラル文字として認識されないことです。そのため、クエリを次のように更新する必要があります。

SELECT * FROM [MyTable] where [MyField] Like 'This[_]% [[]literal]%'

そして、それは機能します。


Likeしたがって、私の質問は、RegExを使用してステートメントの一部を検索し、文字を置き換えるVB.Net関数を作成したいということです。

次のようなもの:

Public Function ConvertQuery(strSQL as string)

... Some kind of Regex that searches for the word "Like" 
    and then takes everytihng between the 2 "'" characters
    Then replaces the "_" with "[_]" and "[" with "[[]"

Return ChangedString
End Function

私は本当に悪い詳細を提供していることを知っています、私は私が欲しいものを知っています、私は正規表現でそれを行う方法を理解することができません。

Likeまた、SQL Serverステートメントを使用してこれを行うためのよりスマートな方法がある場合は、私にも知らせてください!!!

ありがとう!!

4

1 に答える 1

0

そのタグを見てC#、C#での回答で大丈夫だと思います。

string input = "This_is [a] long_text field with [literal] characters in it";
var output = Regex.Replace(input, @"[_\[]","[$0]");

編集

string input = "SELECT * FROM [MyTable] where [MyField] Like 'This_% [literal]'";
var output = Regex.Replace(input, @"(?<=Like[ ]*\'.+?)[_\[]", "[$0]");
于 2012-12-14T22:20:40.223 に答える