SQL Server: So behandelt man Ausnahmefehler in der Datenschicht

Ausnahmefehler korrekt zu handhaben, damit die Benutzer nicht mit obskuren Systemfehlermeldungen behelligt werden, ist normaler Bestandteil jeder .NET-Anwendung. Der Artikel zeigt, wie man Fehlern im Datenbankcode mit SQL Server und T-SQL begegnet.

Fehlerbehandlung in T-SQL

Der SQL-Dialekt T-SQL ermöglicht die einfache Handhabung nicht schwerwiegender Fehler, wie sie in einer gespeicherten Prozedur, einer Funktion oder etwas Ähnlichem auftauchen können. Aber nicht mit allen Fehlern kann man leicht umgehen.

Es gibt schwerwiegende und nicht schwerwiegende Fehler. Schwerwiegende Fehler führen im Gegensatz zu nicht schwerwiegenden Fehlern zu einem Programmabbruch. Es ist allerdings nicht genau dokumentiert, welche Fehler in welche Kategorie gehören. Doch der Anwendungscode kann schwerwiegende Datenbankfehler jederzeit mit try/catch-Blöcken auffangen. Für alle anderen Fehler sollte man die folgenden Techniken einsetzen.

Transaktionen

Durch eine Verwendung von Transaktionen im Datenbankcode lässt sich sicherzustellen, dass jegliche Änderungen dann und nur dann durchgeführt werden, wenn alles in Ordnung ist. Die Onlinehilfe von SQL Server beschreibt Transaktionen als logische Einheiten, die aus einer Reihe von Anweisungen bestehen (select, insert, update oder delete). Falls während der Transaktion keine Fehler auftreten, werden alle Modifikationen in der Transaktion permanenter Bestandteil der Datenbank. Falls Fehler auftreten, werden keinerlei Modifikationen an der Datenbank vorgenommen.

Transaktionen sind zwischen die Anweisungen BEGIN TRANSACTION und END TRANSACTION eingebettet. Die Anweisung ROLLBACK TRANSACTION ermöglicht ein Annullieren aller Änderungen. Erst mit der Anweisung COMMIT TRANSACTION werden die Änderungen permanent übernommen. Im Folgenden geht es darum, wie man Fehler in T-SQL behandelt.

@@Error

Die Funktion @@Error ermöglicht eine Fehlerbehandlung in T-SQL. Sie gibt den vom System generierten Fehlercode zurück. Falls kein Fehler auftritt, wird eine 0 ausgegeben.

Die @@Error-Funktion muss direkt nach einer T-SQL-Anweisung aufgerufen werden, andernfalls wird sie gelöscht.

RAISERROR

Die RAISERROR-Anweisung ermöglicht das Erzeugen einer individuellen Fehlermeldung oder die Verwendung einer der Fehlermeldungen, die in der Tabelle sysmessages gespeichert sind. Die Syntax kann man der Onlinedokumentation entnehmen.

Das einfachste Format umfasst die Meldung selbst (für individuelle Fehlermeldungen) oder eine entsprechende ID (für vorhandene Meldungen) zusammen mit einer Angabe von Schweregrad und Status. Der Status wird von SQL Server nicht verwendet, so dass man hier eine beliebige Zahl übergeben kann. Der Schweregrad gibt an, wie schwerwiegend der Fehler ist: 0 bis 18 ist für Benutzer, 19 bis 25 für Administratoren reserviert.

Fanden Sie diesen Artikel nützlich?
0 von 2 Lesern fanden diesen Artikel nützlich.

Aktuelle Job-Angebote

ZDNet.de Live

Motor ...

Motorola: Android-Updates verzögern sich wegen der Hardware-Vielfalt t.co/...

10.02.12, 20:00 von zdnet_de
Aktie ...

Aktienkurse dort wo man sie am liebsten sieht: auf dem Mülleimer! t.co/...

10.02.12, 19:50 von coke4all
Faceb ...

Facebook details Zuckerberg's $500,000 salary, 45% bonus t.co/...

10.02.12, 19:45 von ZDNet
New ...

New Microsoft Office University product comes with tougher verification rules t.co/...

10.02.12, 19:35 von ZDNet
#Prad ...

#Prada Phone by #LG 3.0 ausgepackt und ausprobiert - #smartphone #android t.co/...

10.02.12, 19:30 von cnet_de
Schon ...

Schon im Test: Prada Phone by LG 3.0 mit Android und superhellem Display t.co/...

10.02.12, 19:30 von cnet_de
Beta ...

Beta von Chrome 18 erweitert Hardwarebeschleunigung t.co/...

10.02.12, 19:30 von zdnet_de
Sage ...

Sage helps chocolate business manage seasonality t.co/...

10.02.12, 19:20 von ZDNet
Colum ...

Columbia University excludes Google Docs t.co/...

10.02.12, 19:20 von ZDNet
Benq ...

Benq bringt XGA-Projektor mit 4000 ANSI-Lumen t.co/...

10.02.12, 19:00 von zdnet_de
Germa ...

Germany postpones ACTA signing in wake of protests t.co/...

10.02.12, 18:45 von ZDNet
Iran ...

Iran cuts off access to popular Web sites t.co/...

10.02.12, 18:40 von ZDNet
Makin ...

Making lame excuses for Microsoft's decision to drop the Start button in Windows 8 t.co/...

10.02.12, 18:40 von ZDNet
Did ...

Did Mark Zuckerberg just Like Mitt Romney on Facebook? t.co/...

10.02.12, 18:35 von ZDNet
Flood ...

Flooding in Thailand will deter hard drive market through Q3 t.co/...

10.02.12, 18:35 von ZDNet
Lenov ...

Lenovo verspricht Android 4.0 für Thinkpad Tablet binnen drei Monaten t.co/...

10.02.12, 18:30 von zdnet_de
Pakis ...

Pakistan sperrt 13.000 "obszöne" Websites t.co/...

10.02.12, 18:10 von zdnet_de
Win 8 ...

Win 8 kurz vor der Consumer Preview: Oberfläche und Apps t.co/...

10.02.12, 18:10 von zdnet_de
#Gadg ...

#Gadget der Woche: #Augmented-Reality-Gewehr AppToy #AppBlaster zu #gewinnen - #ar t.co/...

10.02.12, 18:10 von cnet_de
Iran ...

Iran schaltet Zugriff auf Webmailer und Facebook ab t.co/...

10.02.12, 17:40 von zdnet_de