Arbeiten mit Verbindungsereignissen
Das Connection-Objekt besitzt zwei Ereignisse, mit denen Sie Informationsmeldungen aus einer Datenquelle abrufen oder eine Statusänderung eines Connection-Objekts feststellen können. In der folgenden Tabelle werden die Ereignisse des Connection-Objekts aufgeführt.
Ereignis | Beschreibung |
---|---|
InfoMessage | Tritt auf, wenn eine Informationsmeldung aus einer Datenquelle zurückgegeben wird. Informationsmeldungen sind Meldungen aus einer Datenquelle, die keine Ausnahme auslösen. |
StateChange | Tritt auf, wenn sich der Status des Connection-Objekts ändert. |
InfoMessage
Mit dem InfoMessage-Ereignis des Connection-Objekts können Sie Warnungen und Informationsmeldungen aus einer Datenquelle abrufen. Fehler, die von der Datenquelle zurückgegeben werden, lösen eine Ausnahme aus. Mit dem InfoMessage-Ereignis können jedoch Meldungen aus der Datenquelle abgerufen werden, die keinem Fehler zugewiesen sind. Bei Microsoft SQL Server werden alle Meldungen mit einem Schweregrad von 10 oder weniger als Informationsmeldungen betrachtet und mit dem InfoMessage-Ereignis aufgezeichnet.
Das InfoMessage-Ereignis erhält ein InfoMessageEventArgs-Objekt, das in seiner Errors-Eigenschaft eine Auflistung der Meldungen aus der Datenquelle enthält. Die Error-Objekte in dieser Auflistung können nach der Fehlernummer und dem Meldungstext sowie der Quelle des Fehlers abgefragt werden. Der .NET Framework-Datenprovider für SQL Server zeigt außerdem Details zu der Datenbank, der gespeicherten Prozedur und der Zeilennummer an, aus der die Meldung stammt.
Das folgende Codebeispiel veranschaulicht, wie ein Ereignishandler für das InfoMessage-Ereignis hinzugefügt wird.
SqlClient
Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")
AddHandler nwindConn.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)
Private Shared Sub OnInfoMessage(sender As Object, args As SqlInfoMessageEventArgs)
Dim err As SqlError
For Each err In args.Errors
Console.WriteLine("The {0} has received a severity {1}, state {2} error number {3}\n" & _
"on line {4} of procedure {5} on server {6}:\n{7}", _
err.Source, err.Class, err.State, err.Number, err.LineNumber, _
err.Procedure, err.Server, err.Message)
Next
End Sub
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");
nwindConn.InfoMessage += new SqlInfoMessageEventHandler(OnInfoMessage);
protected static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args)
{
foreach (SqlError err in args.Errors)
{
Console.WriteLine("The {0} has received a severity {1}, state {2} error number {3}\n" +
"on line {4} of procedure {5} on server {6}:\n{7}",
err.Source, err.Class, err.State, err.Number, err.LineNumber,
err.Procedure, err.Server, err.Message);
}
}
OleDb
Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")
AddHandler nwindConn.InfoMessage, New OleDbInfoMessageEventHandler(AddressOf OnInfoMessage)
Private Shared Sub OnInfoMessage(sender As Object, args As OleDbInfoMessageEventArgs)
Dim err As OleDbError
For Each err In args.Errors
Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}", _
err.Source, err.SQLState, err.NativeError, err.Message)
Next
End Sub
[C#]
OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");
nwindConn.InfoMessage += new OleDbInfoMessageEventHandler(OnInfoMessage);
protected static void OnInfoMessage(object sender, OleDbInfoMessageEventArgs args)
{
foreach (OleDbError err in args.Errors)
{
Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}",
err.Source, err.SQLState, err.NativeError, err.Message);
}
}
StateChange
Das StateChange-Ereignis tritt auf, wenn sich der Status eines Connection-Objekts ändert. Das StateChange-Ereignis erhält StateChangeEventArgs, mit denen Sie anhand der OriginalState-Eigenschaft und der CurrentState-Eigenschaft Statusänderungen des Connection-Objekts ermitteln können. Die OriginalState-Eigenschaft ist eine ConnectionState-Enumeration, die den Status des Connection-Objekts vor der Änderung angibt. CurrentState ist eine ConnectionState-Enumeration, die den Status des Connection-Objekts nach der Änderung angibt.
Im folgenden Codebeispiel wird mit dem StateChange-Ereignis eine Meldung in die Konsole geschrieben, sobald sich der Status des Connection-Objekts ändert.
AddHandler nwindConn.StateChange, New StateChangeEventHandler(AddressOf OnStateChange)
Protected Shared Sub OnStateChange(sender As Object, args As StateChangeEventArgs)
Console.WriteLine("The current Connection state has changed from {0} to {1}.", _
args.OriginalState, args.CurrentState)
End Sub
[C#]
nwindConn.StateChange += new StateChangeEventHandler(OnStateChange);
protected static void OnStateChange(object sender, StateChangeEventArgs args)
{
Console.WriteLine("The current Connection state has changed from {0} to {1}.",
args.OriginalState, args.CurrentState);
}