У меня в конторе, где я работаю, есть множество кастомных библиотек. В том числе есть свой DAL для базы данных MSSQL. В DAL любая ошибка которая приходит из ридера, не важно это хранимая процедура или просто SQL запрос, переконвертируеться в applicationexception
. И уже на стороне UI - клиента, выскакивает окно, которое абсолютно все роняет, если не заключить это в try catch
.
Недавно была ситуация, когда у меня падал клиент, на добавлении дубликата. Ибо сохранение сущности шло через хранимую процедуру и дубликатом считается не только ключ, но и одно важное поле.
По логике вещей, если мне приходит из базы SQL Exception, я могу на стороне UI его обработать, по коду ошибки. Считайте что стандартная схема обработки исключений от более частных (специфичных) до общих.
В ответ на мои рассуждения я услышал некоторые слова :
Играть в обработку абсолютно всех исключений не имеет смысла, и потом
исключения медленно работают, если у тебя приходит ошибка из DAL, надо
выбить MessageBox
с сообщением и в лог кидать StackTrace
, не стоит
акцентировать внимание на то что может произойти 1 раз из 1000
На сколько верна данная позиция? Если есть вероятность дубликата, стоит пользователя уведомить о том что имеется дублирование значений, а не кидать MessageBox с сообщением по типу "Введенные значения не удовлетворяют условиям, свяжитесь с администратором"
А также интересует скорость обработки исключений на .net, на сколько сильно они тормозят работу.
Как по мне, то вы пришли к правильной схеме обработки исключений. Думаю, что вам просто хотели сказать, что не нужно тут же бросаться писать десятки блоков catch
на каждый тип исключения, вот и все. Да, в большинстве случаев есть один блок catch
и всё, но во всех остальных случаях - пара-тройка "специфичных" блоков catch
и один "общий" для одного блока try
. Это нормально. У меня на дню иногда по десятку звонков раздается, когда я показываю на UI ошибку по типу "Неверно введенные данные". Потом стоит добавить catch для самого частого исключения, для которого покажется читабельный текст с описанием проблемы, и воцаряет спокойствие. Но, повторюсь, не делать ведь этого для каждого типа исключений.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Каким способом можно определить если Control полностью отрисован в контейнеренужно в цикле проверить все дочерние контролы и определить какой...
Каким образом при нажатии кнопки формы "Развернуть" сделать все компоненты данной формы соответствующими размеру окна?
Мне нужно выполнить background операцию, которая занимает много времени в моем WCF-сервисеСервис не должен быть заблокирован во время выполнения...