DevTrain

Autor: Andreas Rauch

Ausnahmenzustand - Fehlerhandlung in VB.NET

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 sub

Sub 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!

 



 


Erfasst am: 08.04.2003 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=841
© Copyright 2003 ppedv AG - http://www.ppedv.de