用c#替换完整sql查询中的单引号
本文关键字:查询 单引号 sql 替换 | 更新日期: 2023-09-27 18:12:33
在我们的c#桌面应用程序中,我们生成了很多动态sql查询。现在我们在字符串中使用单引号时会遇到一些麻烦。下面是一个示例:
INSERT INTO Addresses (CompanyName) VALUES ('Thomas' Imbiss')
我的问题是:我如何找到并替换字符串中2个其他单引号之间的所有单引号?不幸的是,在创建不同的查询时,我无法替换单引号。我只能在创建完整查询之后,在执行查询之前执行。
我尝试了这个模式(Regular Expressions
): "'w'''w"
但是这个模式不起作用,因为在"s "后面有一个空格而不是一个字符。
很抱歉,没有您所期望的解决方案。
例如,有这些列和值:
- A列,值
,A',
- B列,值
,B',
如果它们在列列表中一起,则有',A',',',B','
。
现在,第一个值和第二个值的边界在哪里?
在为SQL创建文本字段时必须执行操作。要么使用SQL参数,要么正确转义引号和其他有问题的字符。
考虑向管理人员展示上面这个模棱两可的例子,把整个问题推回到你的端,因为算法无法解决。或者提供一个猜测工作,并询问他们是否会高兴,如果几个文本字段的内容可以在某些情况下混合在一起,就像上面的一个。
在创建SQL查询时,如果他们不想开始使用SQL参数,则引用任何input
字符串的解决方案非常简单,只需替换:
string Enquote(string input)
{
return input.All(c => Strings.AscW(c) < 128) ? "'" : "N'"
+ input.Replace("'", "''")
+ "'"
}
当然,它可能会对故意格式化的Unicode字符串(代理对来隐藏'
)产生问题,但通常不可能通过用户界面生成这些字符串。通常,这仍然比将所有查询转换为带有SQL参数的版本要快。