当前位置:  开发笔记 > 数据库 > 正文

在DataTable过滤器表达式中转义字符的正确方法

如何解决《在DataTable过滤器表达式中转义字符的正确方法》经验,为你挑选了2个好方法。

我想知道是否有一个函数来正确地转义过滤器表达式的字符串文字.例如:

DataTable.Select(String.Format("[name] = '{0}'", MyName))

如果MyName包含'或许多其他关键字符,则会生成异常.在微软的文档表明,这些charaters应正确逃脱,但没有对如何,这是做了一些混乱.

我已经尝试用文档中的指示替换'with \'和['],但查询仍然失败.

非常感谢



1> Rory..:

通过将单引号"加倍"来逃避单引号.通过包装在[]中转义*%[]个字符.例如

private string EscapeLikeValue(string value)
{
    StringBuilder sb = new StringBuilder(value.Length);
    for (int i = 0; i < value.Length; i++)
    {
        char c = value[i];
        switch (c)
        {
            case ']':
            case '[':
            case '%':
            case '*':
                sb.Append("[").Append(c).Append("]");
                break;
            case '\'':
                sb.Append("''");
                break;
            default:
                sb.Append(c);
                break;
        }
    }
    return sb.ToString();
}

public DataRow[] SearchTheDataTable(string searchText)
{ 
     return myDataTable.Select("someColumn LIKE '" 
                                 + EscapeLikeValue(searchText) + "'");
} 

感谢这里的例子


啊.当过滤器是LIKE子句时,括号的转义仅****.不是当它是一个=子句.

2> Ady..:

如果我将'with two single'替换为查询有效.


这甚至不是DataTable特有的,而是在SQL中执行它的一般方式.:-)
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有