Like运算符和转义特殊字符时出错

时间:2013-10-28 13:47:12

标签: c# sql escaping character

我得到了例外:

  

Like运算符出错:字符串模式'Blah [Blah Blah]'无效。

我正在使用数据表的Select方法,如下所示:

DataRow[] rows = table.Select("X Like '" + y + "'");

我从阅读其他帖子看到它是方括号。我读过的帖子说是为了逃避方括号,但大多数都把重点放在问题的根源上,即开发人员可以轻易逃脱的硬编码字符串。

我正在从数据库中读取数据。我可以做y.replace("[", "\\[")这样的事情,我猜这会解决方括号的问题。但后来我想知道,如果DB中的其他地方有一个带*等的字符串

其他人如何处理这件事?我是否可以通过转义所有可能非法的字符来调用能够使字符串安全的东西,还是用转义的等价物手动替换它们?

1 个答案:

答案 0 :(得分:0)

如果其他人遇到这个问题,这里是我采用的解决方案。回应Frédéric上面提出的建议,Jon Skeets解决方案Escaping special character in string in C#也使用了DataTable.Select()以外的其他东西,所以我使用了他的LINQ建议。

但是,我也遇到了这个答案Correct way to escape characters in a DataTable Filter Expression,如果你想要实现一种逃避大多数非法字符的方法,它会提供一些可以重复使用的代码。但是,因为你不知道在所有条件下哪个角色可能是非法的,所以我更喜欢不依赖于这种技术的解决方案。