0

我有一个小问题,因为我Like在我的 .Net 应用程序中传递了几个 SQL Server 查询(我无法控制),我需要转义一些字符以使它们成为数据库的文字。

例如,假设我尝试查询的字段类似于:

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

我的查询看起来像这样:

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

现在,这应该得到该数据,挑战是 SQL Server 没有将_and[字符视为文字字符,因此我必须将查询更新为:

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

然后它就起作用了。


所以,我的问题是我想编写一个 VB.Net 函数,它使用 RegEx 来查找Like语句的一部分,然后替换字符。

类似于以下内容:

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

我知道我提供了非常糟糕的细节,我知道我想要什么,我只是不知道如何使用 RegEx 来做到这一点。

另外,如果有更聪明的方法来使用 SQL ServerLike语句执行此操作,也告诉我!!!

谢谢!!

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 回答