23.4 Ereignisse eines Connection-Objekts
DbConnection definiert das Ereignis StateChange, und SqlConnection fügt InfoMessage dazu.
23.4.1 StateChange
Das Ereignis StateChange tritt auf, wenn sich die State-Eigenschaft ändert. Im Ereignishandler können Sie die Eigenschaften OriginalState und CurrentState des Args-Objekts auswerten, um den alten und neuen Zustand der Verbindung zu überprüfen.
'...\ADO\Verbindung\StateChange.vb |
Option Strict On Imports System.Data.Common Imports System.Data.SqlClient Namespace ADO Module StateChange Sub Test() Dim con As DbConnection = New SqlConnection( _ "Data Source=(local);Initial Catalog=Northwind;" & _ "Integrated Security=sspi") AddHandler con.StateChange, AddressOf con_StateChange con.Open() con.Close() Console.ReadLine() End Sub Sub con_StateChange(ByVal obj As Object, _ ByVal ev As StateChangeEventArgs) Console.Write("Zustand: von {0}", ev.OriginalState) Console.WriteLine(" nach {0}", ev.CurrentState) End Sub End Module End Namespace
23.4.2 InfoMessage
Bei auftretenden Problemen gibt SQL Server eine Informationsmeldung an den Aufrufer zurück, die das Problem beschreibt. Ein Problem kann mehr oder weniger schwerwiegend sein. Um das genauer zu beschreiben, unterscheidet SQL Server Fehler nach ihrem Schweregrad und definiert dazu 25 Stufen. Die Schweregrade 0 bis 10 stehen ausschließlich für Informationsmeldungen zur Verfügung. Fehler des Schweregrads 11 bis 16 kann ein Anwender selbst beheben, ab Schweregrad 17 muss der Datenbankadministrator aktiv werden.
Das InfoMessage-Ereignis wird ausgelöst, wenn vom SQL Server eine Meldung mit einem Schweregrad von 10 oder weniger zurückgegeben wird. Im folgenden Beispiel wird die Anweisung PRINT an den SQL Server geschickt. Die auf PRINT folgende Zeichenfolge wird von der Datenbank als Informationsquelle an den Client gesendet, was ein InfoMessage-Ereignis auslöst. Die Servermeldung wird der Eigenschaft Message des Args-Objekts entnommen. Auf die Verwendung von ExecuteNonQuery gehen wir im nächsten Kapitel ein.
'...\ADO\Verbindung\InfoMessage.vb |
Option Strict On Imports System.Data.Common Imports System.Data.SqlClient Namespace ADO Module InfoMessage Sub Test() Dim con As SqlConnection = New SqlConnection( _ "Data Source=(local);Initial Catalog=Northwind;" & _ "Integrated Security=sspi") AddHandler con.InfoMessage, AddressOf con_InfoMessage con.Open() Dim cmd As DbCommand = con.CreateCommand() cmd.CommandText = "PRINT 'Informationsmeldung'" cmd.ExecuteNonQuery() con.Close() Console.ReadLine() End Sub Sub con_InfoMessage (ByVal obj As Object, _ ByVal ev As SqlInfoMessageEventArgs) Console.WriteLine("Meldung vom Server: {0}", ev.Message) End Sub End Module End Namespace
Das InfoMessage-Ereignis wird normalerweise nur bei Informations- und Warnmeldungen des Servers ausgelöst. Bei einem tatsächlichen Fehler wird eine Ausnahme ausgelöst, zum Beispiel in Zusammenhang mit den Methoden ExecuteNonQuery oder ExecuteReader, die wir im nächsten Kapitel behandeln.
Wollen Sie die Verarbeitung trotz Serverfehlern fortsetzen, legen Sie die FireInfoMessageEventOnUserErrors-Eigenschaft des SqlConnection-Objekts auf True fest. Dadurch löst die Verbindung beim Auftreten von Fehlern das InfoMessage-Ereignis aus, anstatt eine Ausnahme auszulösen und die Verarbeitung zu unterbrechen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.