Cóż, jestem małpą kodu klienta, która dużo zajmuje się bazami danych. Oto jak sobie z tym radzę.
Wyjątki (raiseerrors) występujące w SQL są propagowane z powrotem do wywołującego. Obejmuje to ograniczenia ref, unikatowe naruszenia indeksów, poważniejsze problemy itp. Zasadniczo wszystko, co nie powoduje normalnego przebiegu operacji na danych, powinno być propagowane z powrotem.
Wywołujący C# powinien mieć to:
catch (SQLException sqlEx)
A następnie w razie potrzeby obsłuż wyjątek. Powinny mieć określoną procedurę obsługi wyjątków SQLException. To ważne.
Generalnie trzymam się z dala od parametrów wyjściowych, ponieważ uważam, że są one związane z przesyłanymi danymi, a nie komunikatami o błędach, dodatkowo mogę sprawdzić wyjątek pod kątem kodu błędu SQL Server, więc wszystkie potrzebne nam dane powinny znajdować się w tym wyjątku.
Dodatkowo, w niektórych przypadkach z SQL Server, mamy procedury składowane, które mogą zgłaszać „wyjątki typu biznesowego”. W takich przypadkach dodajemy niestandardowy numer błędu (powyżej 50000) i w razie potrzeby zgłaszamy ten błąd w procedurze składowanej. Ogólnie staramy się ograniczyć je do minimum, ponieważ zwiększa to złożoność, ale w niektórych przypadkach uznaliśmy je za konieczne.
Teraz, ponieważ klient przechwytuje wyjątek SQLException, może spojrzeć na kod błędu zwrócony przez SQL Server w wyjątku, a następnie podjąć specjalne działanie (w razie potrzeby), gdy wyjątek zostanie przechwycony, a numer błędu ma określoną wartość. Pozwala to na dodatkowy poziom obsługi błędów w oparciu o kod błędu, jeśli jest to wymagane w przypadku błędów niestandardowych (>50000).
Pozwala to również administratorom baz danych na zgłaszanie błędów niestandardowych, a kod klienta ma spójny sposób radzenia sobie z nimi. Administratorzy baz danych musieliby wtedy poinformować klienta kodującego, jakie były błędy niestandardowe, aby mogli się na nie przygotować.
Zwykle nie używam kodów powrotnych do celów obsługi błędów, chociaż widzę, jak można ich użyć, ale oznacza to więcej logiki w warstwie kodu małpy, aby przyjrzeć się i poradzić sobie z kodem powrotnym. Jeśli stanowią problem, chcę odzyskać wyjątek, ponieważ wtedy mogę konsekwentnie sobie z nimi radzić. Jeśli muszę przyjrzeć się również kodom zwrotnym, teraz istnieje wiele sposobów obsługi błędów.