Я использую System.Data.DataView.RowFilter
для фильтрации таблицы. У меня есть столбец "Time" с DateTime
типом данных и для этого столбца Я использую следующий фильтр:Ожидаемое исключение не выбрасывается, когда DataView.RowFilter настроен на неправильный фильтр
< Время = '15 .12.2015 11: 38: 03,000'
Но случайно я неправильно набранной точки, что отделяет секунды и миллисекунды, а вместо этого набрал в точку с запятой:
< Время = '15 .12.2015 11: 38: 03: 000' .
У меня были некоторые данные в таблице, и в первом случае он был отфильтрован, как и должно быть, но второй случай дал пустой результат.
Но когда я попытался воссоздать эту проблему за пределами проекта, я узнал, что второй случай вызывает исключение!
Код:
var dt = new DataTable();
var col = dt.Columns.Add("Time");
col.DataType = typeof(DateTime);
var row = dt.NewRow();
row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
dt.Rows.Add(row);
dt.Rows.Count.Dump();
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03.000'"; // Ok.
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03:000'"; // Evaluation Exception.
Я проверил несколько раз, и в моем проекте:
- Это исключение не выдается.
- RowFilter равен
"Time<= '15.12.2015 11:38:03:000'"
после экзаменации. - Выполнение кода продолжается, как и при использовании правильного выражения фильтра.
Я думал, что это может быть ошибка 4.0. 4.0 4.0 и установить для него среду моего тестового приложения. Тот же результат: он выдает исключение, но не исключение в проекте.
В тестовом приложении исключение выбрано даже без отладки в сборке релизов, поэтому оно не зависит от настроек отладчика.
Я дважды проверил, что я использую те же классы из той же библиотеки.
Я запускаю оба проекта и тестовое приложение на одном ПК.
Вот скриншот отладки с следующим шагом после того, как RowFilter
значения было установлено в некорректный фильтр и принять его без исключения:
Что может быть причиной такой ситуации, когда ожидается исключение не воскресают?
Вы уверены, что в программе нет «try ... catch» блоков, которые ловят исключение? – Matthew
@Matthew да, есть, но это не имеет значения. Посмотрите на скриншот, выполнение переходит к следующей строке и примененному фильтру. – CodingFeles