Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Obsługa błędów SQL Server:wyjątki i umowa klient bazy danych

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj „datetimeoffset” na „datetime” w SQL Server (przykłady T-SQL)

  2. SQL Server odpowiednik DBMS_METADATA.GET_DDL

  3. Jak używać funkcji IDENTITY() w SQL Server

  4. Replikacja/synchronizacja bazy danych SQL Server Express

  5. Jak mogę sprawdzić duplikaty przed wstawieniem do tabeli podczas wstawiania przez wybór?