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.