用c#替换完整sql查询中的单引号

本文关键字:查询 单引号 sql 替换 | 更新日期: 2023-09-27 18:12:33

在我们的c#桌面应用程序中,我们生成了很多动态sql查询。现在我们在字符串中使用单引号时会遇到一些麻烦。下面是一个示例:

INSERT INTO Addresses (CompanyName) VALUES ('Thomas' Imbiss')

我的问题是:我如何找到并替换字符串中2个其他单引号之间的所有单引号?不幸的是,在创建不同的查询时,我无法替换单引号。我只能在创建完整查询之后,在执行查询之前执行。

我尝试了这个模式(Regular Expressions): "'w'''w"

但是这个模式不起作用,因为在"s "后面有一个空格而不是一个字符。

用c#替换完整sql查询中的单引号

很抱歉,没有您所期望的解决方案。

例如,有这些列和值:

  • 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参数的版本要快。