【发布时间】:2015-12-10 05:38:46
【问题描述】:
在我们的 C# 桌面应用程序中,我们生成了许多动态 sql 查询。现在我们在字符串中使用单引号会遇到一些麻烦。这是一个示例:
INSERT INTO Addresses (CompanyName) VALUES ('Thomas' Imbiss')
我的问题是:如何查找和替换字符串中两个其他单引号之间的所有单引号?不幸的是,在创建不同的查询时我无法替换单引号。我只能在创建完整查询之后和执行查询之前执行此操作。
我试过这个模式(Regular Expressions):“\w\'\w”
但是这种模式不起作用,因为在“s”之后有一个空格而不是一个字符。
【问题讨论】:
-
我猜你的查询比这个复杂得多。恐怕这里没有 100% 安全的方法。除非您在这里找到适合您的模式(用文字表达),否则很难提出任何建议。
-
您可以使用双引号代替单引号来赋予价值。您可以像这样使用上面的查询:INSERT INTO Addresses (CompanyName) VALUES ("Thomas' Imbiss")
-
我会评估成本:您花在调整模式匹配表达式上的时间来跟踪所有将发生的情况并修补所有错误(如果您能捕获所有错误......)与使用参数动态 sql 与一次重写应用程序一个组件/类以使用存储过程。
-
如果您在构建字符串时知道这些值是什么,那么简单的
myValue.Replace("'", "''")就可以工作(双引号将它们转义)。显然这需要单独插入到查询中,否则外部引号也会被转换...... -
@stribizhev 当然,这只是一个例子。哦,我认为
Regex应该可以做到这一点。
标签: c# sql sql-server regex