Я бы использовал блок try / catch, когда нормальный путь через код должен проходить без ошибок, если только нет действительно каких-то исключительных условий - например, сервер не работает, ваши учетные данные истекли или неверны. Я бы не стал использовать его для обработки неисключительных ошибок, например, если текущий пользователь не в нужной роли. То есть, когда вы можете разумно ожидать и обрабатывать ошибку, которая не является исключительным условием, я думаю, вы должны выполнить свои проверки.
В случае, который вы описали - настройка и выполнение запроса, блок try / catch является отличным способом справиться с ним, поскольку вы обычно ожидаете, что запрос будет успешным. С другой стороны, вы, вероятно, захотите проверить, что содержимое результата соответствует логике потока управления, а не пытаться использовать данные, которые могут быть недопустимыми для ваших целей.
Одна вещь, на которую вы хотите обратить внимание - небрежное использование try / catch. Try / catch не следует использовать, чтобы защитить себя от плохого программирования - «Я не знаю, что произойдет, если я сделаю это, поэтому я собираюсь обернуть это в попытку / поймать и надеяться на лучшее» программирования. Как правило, вы хотите ограничить типы исключений, которые вы ловите, теми, которые не связаны с самим кодом (сбой сервера, неверные учетные данные и т. Д.), Чтобы вы могли находить и исправлять ошибки, связанные с кодом (нулевые указатели и т. Д.). .).