Użyłbym bloku try/catch, gdy normalna ścieżka przez kod powinna przebiegać bez błędów, chyba że istnieją naprawdę wyjątkowe warunki - takie jak awaria serwera, wygaśnięcie lub niepoprawne poświadczenia. Niekoniecznie używałbym go do obsługi niewyjątkowych błędów - powiedzmy, że bieżący użytkownik nie jest w odpowiedniej roli. Oznacza to, że jeśli możesz racjonalnie oczekiwać i poradzić sobie z błędem, który nie jest stanem wyjątkowym, myślę, że powinieneś to sprawdzić.
W przypadku, który opisałeś — skonfigurowanie i wykonanie zapytania, blok try/catch to doskonały sposób na jego obsługę, tak jak zwykle oczekujesz powodzenia zapytania. Z drugiej strony, prawdopodobnie będziesz chciał sprawdzić, czy zawartość wyniku jest taka, jakiej oczekujesz za pomocą logiki przepływu sterowania, a nie tylko próbować użyć danych, które mogą nie być prawidłowe dla twojego celu.
Jedną rzeczą, na którą chcesz zwrócić uwagę, jest niechlujne użycie try/catch. Try/catch nie powinien być używany do ochrony przed złym programowaniem — rodzaj „Nie wiem, co się stanie, jeśli to zrobię, więc zamierzam owinąć to w try/catch i mam nadzieję na najlepsze” programowania. Zazwyczaj będziesz chciał ograniczyć rodzaje wyjątków, które przechwytujesz, do tych, które nie są związane z samym kodem (niedziałający serwer, złe poświadczenia itp.), aby można było znaleźć i naprawić błędy związane z kodem (puste wskaźniki itp. .).