Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Fehlerbehandlung:Ausnahmen und der Datenbank-Client-Vertrag

Nun, ich bin ein Client-Code-Affe, der viel mit Datenbanken zu tun hat. So gehe ich damit um.

Ausnahmen (raiseerrors), die in SQL auftreten, werden zurück an den Aufrufer weitergegeben. Dazu gehören Verweisbeschränkungen, eindeutige Indexverletzungen, schwerwiegendere Probleme usw. Grundsätzlich sollte alles, was die Datenoperation nicht normal durchführen würde, zurück propagiert werden.

Das aufrufende C# sollte folgendes haben:

catch (SQLException sqlEx)

Und behandeln Sie dann die Ausnahme nach Bedarf. Sie sollten einen bestimmten SQLException-Handler haben. Das ist wichtig.

Ich halte mich im Allgemeinen von Ausgabeparametern fern, weil ich der Ansicht bin, dass diese mit den zu transportierenden Daten und nicht mit Fehlermeldungen zusammenhängen. Außerdem kann ich die Ausnahme auf den SQL Server-Fehlercode untersuchen, sodass alle Daten, die wir benötigen, in dieser Ausnahme enthalten sein sollten.

Darüber hinaus haben wir in einigen Fällen mit SQL Server gespeicherte Prozeduren, die „Business Type of Exceptions“ auslösen könnten. In diesen Fällen fügen wir eine benutzerdefinierte Fehlernummer (über 50000) hinzu und lösen diesen Fehler bei Bedarf in der gespeicherten Prozedur aus. Im Allgemeinen versuchen wir, diese auf ein Minimum zu beschränken, da dies die Komplexität erhöht, aber in einigen Fällen haben wir festgestellt, dass sie notwendig sind.

Da der Client nun die SQLException abfängt, kann er sich den von SQL Server in der Ausnahme zurückgegebenen Fehlercode ansehen und dann (falls erforderlich) spezielle Maßnahmen ergreifen, wenn die Ausnahme abgefangen wird und die Fehlernummer einen bestimmten Wert hat. Dies ermöglicht eine sekundäre Ebene der Fehlerbehandlung basierend auf dem Fehlercode, falls dies für die benutzerdefinierten Fehler (>50000) erforderlich ist.

Dies ermöglicht es den DBAs auch, benutzerdefinierte Fehler zu melden und dem Client-Code eine konsistente Möglichkeit zu geben, damit umzugehen. Die DBAs müssten dann dem Client-Code-Affen mitteilen, was die benutzerdefinierten Fehler waren, damit sie sich darauf vorbereiten konnten.

Normalerweise verwende ich die Rückgabecodes nicht zur Fehlerbehandlung, obwohl ich sehen kann, wie sie verwendet werden könnten, aber das bedeutet mehr Logik in der Code-Affe-Schicht, um den Rückgabecode zu betrachten und damit umzugehen. Wenn sie ein Problem sind, möchte ich eine Ausnahme zurück, weil ich dann konsequent damit umgehen kann. Wenn ich mir auch Rückgabecodes ansehen muss, gibt es jetzt mehrere Möglichkeiten der Fehlerbehandlung.