Danke Dir. Das hat sich echt gelohnt :-)
Gru�, Matthias

  >-----Original Message-----
  >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
  >Behalf Of Joachim van de Bruck
  >Sent: Friday, October 10, 2003 3:24 PM
  >To: [EMAIL PROTECTED]
  >Subject: AW: [Asp.net] Exception
  >
  >
  >Hallo!
  >
  >> >Den "Finally"-Part
  >> >muss man nat�rlich zus�tzlich definieren ("Sender.Close", ...).
  >>
  >> Kannst Du das bitte etwas ausf�hrlicher beschreiben?
  >
  >Wenn ich �BERALL Try-Catch-Finally-Bl�cke habe, sehe ich die Besonderheiten
  >einzelner nicht mehr. Also mache ich zun�chst einmal ein zentrales
  >Try-Catch-Finally in der Global.asax oder in der Sub Main bei
  >Windows-Forms-Applikationen. Wenn ich dann mal im Code Try-Catch-Finally
  >verwende, dann f�llt das als Besonderheit direkt auf.
  >
  >Finally-Bl�cke werden aber immer ausgef�hrt und sind deshalb pr�destiniert
  >f�r Aufr�umarbeiten, also z. B. das Schlie�en von Deteien oder das Freigeben
  >von nicht mehr ben�tigten Ressourcen. Deshalb findet man das auch so in
  >vielen Beispielen. Aber die sind auch tr�gerisch: Eine Database-Connection,
  >die im Finally-Block geschlossen wird, erzeugt wiederum eine Exception, wenn
  >das Objekt noch gar nicht geladen wurde (NullReference), die erste Exception
  >also vor dem Laden auftrat. Also braucht man daf�r wieder eine If-Abfrage.
  >
  >Mein Code:
  >
  >Dim dbc As New Data.SqlClient.SqlConnection(...)
  >Dim cmd As New Data.SqlClient.SqlCommand("...", dbc)
  >Cmd.Execute
  >Cmd.Dispose : dbc.Close : dbc.Dispose
  >
  >Mit Try-Catch-Finally:
  >
  >Dim dbc As Data.SqlClient.SqlConnection
  >Dim cmd as Data.SqlClient.SqlCommand
  >Try
  >   dbc = new Data.SqlClient.SqlConnection(...)
  >   cmd = new Data.SqlClient.SqlCommand("...", dbc)
  >   Cmd.Execute
  >Catch ex As Exception
  >   ...
  >Finally
  >   If Not cmd Is Nothing Then cmd.Dispose
  >   If Not dbc Is Nothing Then dbc.Close : dbc.Dispose
  >End Try
  >
  >Aus 4 Zeilen werden also 12 Zeilen, blo� weil die Objekte au�erhalb von
  >Try-Catch-Finally deklariert werden m�ssen, damit sie im Finally-verwendet
  >werden k�nnen. Das wird dann auf die Dauer ziemlich un�bersichtlich. ;-)
  >
  >Meine 4 Zeilen sind da �berschaubarer. Aber in der Global.asax oder in der
  >Sub Main mache daf�r eine globale Fehlerbehandlung. Ich unterscheide dabei
  >zwischen Produktions- und Entwicklungssystem und wohin der User dann
  >umgeleitet wird. Meistens erfordert eine Exception doch irgendeinen Abbruch,
  >oder? In der globalen Routine kann man dann die Objekte auch freigeben,
  >entweder durch "sp�tes binden" (separate Assembly mit "Option Strict
  >Off")oder abh�ngig vom Typ oder mit Trial-And-Error, also z. B.
  >
  >Try
  >   Sender.Close
  >Catch : End Try
  >Try
  >   Sender.Dispose
  >Catch : End Try
  >
  >Oder
  >
  >Try
  >   CType (Sender, Data.SqlClient, SqlConnection).Close
  >Catch : End Try
  >Try
  >   CType (Sender, Data.SqlClient, SqlConnection).Dispose
  >End Try
  >
  >Oder
  >
  >If Sender.GetType().ToString = GetType(Data.SqlClient.SqlConnection) Then
  >   CType (Sender, Data.SqlClient, SqlConnection).Close
  >   CType (Sender, Data.SqlClient, SqlConnection).Dispose
  >ElseIf ...
  >...
  >End If
  >
  >Zum Aufr�umen reicht es aber auch aus, nacheinander die Methoden "Close",
  >"Dispose" und "Finalize" zu probieren. Was damit nicht klappt, wird von der
  >Garbage-Collection erledigt, oder?
  >
  >Freundliche Gr��e
  >Joachim van de Bruck
  >
  >
  >_______________________________________________
  >Asp.net mailing list
  >[EMAIL PROTECTED]
  >http://www.glengamoi.com/mailman/listinfo/asp.net
  >
  >



_______________________________________________
Asp.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an