Метод .Net Framework DataTable.Select (String), когда выражение фильтра содержит 'или " - PullRequest
1 голос
/ 25 февраля 2010

В веб-приложении .Net я использую метод public DataRow [] Select (string filterExpression) во многих местах. Из-за изменения в последнюю минуту символы, такие как 'и', теперь являются допустимым вводом. Какие опции у меня есть, есть ли способ изменить filterExpression адекватным способом и при этом сохранить функциональность Select в datatable, могу ли я переключиться на LINQ

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Избегайте одинарных кавычек (') в литерале выражения, удваивая его:' '

Нет необходимости экранировать двойную кавычку (") в строковом литерале. Строковые литералы ограничиваются одинарными кавычками, поэтому двойная кавычка должна быть только стандартной C #, экранированной: \" (или "", если внутри строки дословно начинается с символ @)

См. эту ссылку для получения дополнительной информации.

0 голосов
/ 28 мая 2010

Избегайте одинарных кавычек, удваивая их до ''. Escape *% [] символы, заключив в []. например

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) + "'");
} 

Благодаря примерам здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...