如何在C#中转义mysql字符串以与LIKE一起使用

时间:2011-01-14 01:38:07

标签: mysql

我想在我的标签列表中找到一个单词。他们可以在开始,结束或中间,所以我尝试写作。

Where name like "%@0%"

那没用,所以我试过

@"LIKE ""%" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(q) +@"%"

我认为这样有效,所以我尝试搜索%。结果显示我的所有标签,我预计只有标签含有%(因此没有ATM)。

如何正确转义字符串?并用它来搜索文本的中间部分?

-edit -

解决方案如下。我针对一些测试运行它并将它们全部通过。查询是

... where n.name LIKE CONCAT("%",  @some_name , "%") ...;

然后在代码中

cmd.Parameters.AddWithValue("@some_name", val.Replace("\\", "\\\\").Replace("_", "\\_").Replace("%", "\\%")));

1 个答案:

答案 0 :(得分:1)

您还需要在字符串中转义%_个字符,因为这些字符是LIKE运算符使用的特殊通配符:

@"LIKE ""%" +
    MySql.Data.MySqlClient.MySqlHelper.EscapeString(q)
        .Replace("_", "\\_").Replace("%", "\\%") +
    @"%"

您可以考虑将此包装在静态方法中以实现可重用性。