Как искать пользовательский ввод в столбце DataTable - PullRequest
1 голос
/ 27 декабря 2010

В настоящее время я ищу, как показано ниже.

DataRow [] rows = dataTable.Select ( "FieldName = '" + userInput + "'");

Проблема здесь в том, что когда пользователь вводит одиночную кавычку ('), он выдает ошибку.

Я могу легко исправить это

DataRow [] rows = dataTable.Select ("FieldName = '" + userInput.Replace ("'", "' '") + "'");

Я беспокоюсь о том, что другие пользовательские вводы могут вызвать проблемы?

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

Здесь - точный ответ почетного Мистера. Джон Скит .

1 голос
/ 27 декабря 2010

@ Ismail: было бы неплохо, если бы мы проверяли вводимые пользователем данные перед их использованием в запросах переднего плана или в запросах внутреннего уровня.

Так что я думаю, что в вашем сценарии у вас должна быть функция, подобная ...

if(ValidateInput(userInput))
{
  DataRow[] rows = dataTable.Select("FieldName='"+ userInput + "'");
}

и при проверке вы можете сделать любую проверку. Прямо сейчас вы хотите только проверить, но в будущем, возможно, вам придется проверить что-то еще.

и, в зависимости от ваших потребностей, вы можете проверить тип возвращаемой функции проверки, если вы хотите изменить входные данные, то измените и верните эти данные, просто вернув bool.

Если вы хотите использовать DataTable.Select (фильтр) для фильтра данных, вам придется форматировать / игнорировать или заменять специальный символ из оператора фильтра, и для этого вам нужно будет написать больше кода. Если вы не хотите паниковать из-за специального символа, вы можете использовать LINQ, например

        DataTable dataTable = new DataTable();
        DataColumn dc = new DataColumn("FieldName");
        dataTable.Columns.Add(dc);
        DataRow dr = dataTable.NewRow();
        dr[0] = "D'sulja";
        dataTable.Rows.Add(dr);
        string input = "D'sulja";

        var result = from item in dataTable.AsEnumerable()
                     where item.Field<string>("FieldName") == input select item;
0 голосов
/ 27 декабря 2010

В этом случае, я думаю, единственная кавычка - это единственный символ, о котором вам нужно беспокоиться, поскольку он используется для разделения строковых значений. Дополнительные сведения о синтаксисе выражений см. В записи MSDN для DataColumn.Expression (для создания выражения фильтра используются те же правила, что и для свойства DataColumn.Expression).

Вы не указываете, какую версию C # вы используете, но с помощью LINQ вы можете сделать это:

var rows = table.AsEnumerable()
                .Where(r => r.Field<string>("Name") == "O'Hare")
                .Select(r => r)
                .ToArray();

Одним из компромиссов является то, что вам также необходимо проверить RowState, если у вас есть какие-либо удаленные строки в DataTable, но он предоставляет другую опцию.

...