Ein guter VBler gibt nicht auf. Ein guter VBler baut in seinen Code auch eine Fehlerbanhdlung ein. Ein guter VBler gibt auch schnell die Vorzüge einer strukturierten Fehlerbehandlung wie in VB.NET zu. Wie die Fehlerbahndlung aussah lag mehr oder weniger am Entwicklerlag.
In Vb sah sie ungefähr immer so aus.
On error goto Sprungstelle Code Exit ... sprungstelle: Fehlerbehandlung |
Jetzt nehmen wir mal den Fall an, dass eine Connection zu DB aufgemacht wird, die nach Beendigung der Prozedur auch wieder geschlosssen werden soll.Tritt allerdings ein Fehler auf wurde die Verbindung nicht geschlossen. Also auch in die Fehlerbehandlung das Schliessen der Verbindung einbauen.
Mit einem Wort umständlich. Was, wenn es einfacher auch geht? Das ist genau der Punkt, wo VB.NET mit einer strukturierten Fehlerbehandlung einem viel Arbeit abnehmen kann.
Die Struktur der Fehlerbehandlung sieht folgendermassen aus:
try ' Codeblock, der nach Fehlern überwacht werden soll Catch End try |
Beispiel:
Dim i as integer i=5
Try i = i/3 Catch e As Exception messagebox.show(e.Message) End Try |
Falls das Ergebnis (was es hier auch nicht macht) nicht einem integer entpricht, wird der Fehler von der Catch Anweisung verarbeitet.
Sofern der Fehler nicht durch das catch abgefangen wird, sürzt unser Programm ab.
Übrigens, eines mal nebenbei, Fehler heissen jetzt wie sie sehen Ausnahmen ;-).
Mit der Exception Variablen erhalten wir noch ein paar zusätzliche Informationen.
Wo der Fehler auftrat (Source) oder die Angabe (Link) zu einer Help Datei.
Exceptions
Die Mutter aller Ausnahmen ist die Exception selber, d.h mit deren Kindern kann man eine recht umfangreiche Sammlung von Ausnahmen anlegen wie ArithmaticException oder OverflowException.
Auf eines sollte man allerdings aufpassen. Die Anweisung as Exception muss logischerweise am Schluss des Catch stehen, da Sie jegliche Fehlerbehandlung sonst abfängt, bevor z.b ArithmaticException prüft.
When
Die Catch Anweisung kann nun noch mit when erweitert werden.
Sub main() Catch e as exception when e.TargetSite.Name = "test" End subSub test() ... end Sub
|
Dies Anweisung fängt der Catch Block nur die Fehler ab, die aus der Prozedur "test" stammen.
So.., und nun noch der ultimative Vorteil der strukturierten Fehlerbehandlung.
Der Finally Block
Dort können nun all die Dinge erledigt werden, die auf jeden Fall - bei Fehler oder auch ohne Fehler- geschehen sollen, wie z.b. das Schliessen einer Connection. Der Finally Block wir auf jeden Fall abgearbeitet.
try fehler() catch e as exception messagebox.show ("Fehler!") Finally 'Schliessen der Connection, etc End try |
Also auf gehts!