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

Ady*_*Ady 22 .net ado.net

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

DataTable.Select(String.Format("[name] = '{0}'", MyName))
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢

Ror*_*ory 32

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

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) + "'");
} 
Run Code Online (Sandbox Code Playgroud)

感谢这里的例子

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

Ady*_*Ady 6

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

  • 这甚至不是DataTable特有的,而是在SQL中执行它的一般方式.:-) (3认同)