Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Alle .NET Framework-Datenanbieter verfügen Connection über Objekte mit zwei Ereignissen, mit denen Sie Informationsmeldungen aus einer Datenquelle abrufen oder ermitteln können, ob sich der Status einer Connection Daten geändert hat. In der folgenden Tabelle werden die Ereignisse des Connection Objekts beschrieben.
| Ereignis | BESCHREIBUNG |
|---|---|
| InfoMessage | Dieses Ereignis tritt auf, wenn eine Informationsmeldung aus einer Datenquelle zurückgegeben wird. Informationsmeldungen sind Nachrichten aus einer Datenquelle, die nicht dazu führen, dass eine Ausnahme ausgelöst wird. |
| Statusänderung | Tritt auf, wenn sich der Zustand der Connection ändert. |
Arbeiten mit dem "InfoMessage"-Ereignis
Mit dem InfoMessage-Ereignis des SqlConnection-Objekts können Warnungen und Informationsmeldungen aus einer SQL Server-Datenquelle abgerufen werden. Wenn von einer Datenquelle Fehler mit einem Schweregrad zwischen 11 und 16 zurückgegeben werden, wird eine Ausnahme ausgelöst. Das InfoMessage Ereignis kann jedoch verwendet werden, um Nachrichten aus der Datenquelle abzurufen, die keinem Fehler zugeordnet sind. Bei Microsoft SQL Server gilt jeder Fehler mit einem Schweregrad von 10 oder weniger als Informationsmeldung und kann mithilfe des InfoMessage Ereignisses erfasst werden. Weitere Informationen finden Sie im Artikel Schweregrade von Datenbank-Engine-Fehlern.
Das InfoMessage Ereignis empfängt ein SqlInfoMessageEventArgs Objekt, das in seiner Errors Eigenschaft eine Auflistung der Nachrichten aus der Datenquelle enthält. Sie können die Error Objekte in dieser Auflistung nach der Fehlernummer und dem Meldungstext sowie der Quelle des Fehlers abfragen. Der .NET Framework-Datenanbieter für SQL Server enthält auch Details zu der Datenbank, gespeicherten Prozedur und Zeilennummer, aus der die Nachricht stammt.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie für das InfoMessage-Ereignis ein Ereignishandler hinzugefügt wird.
' Assumes that connection represents a SqlConnection object.
AddHandler connection.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
// Assumes that connection represents a SqlConnection object.
connection.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);
}
}
Behandeln von Fehlern als "InfoMessages"
Das InfoMessage-Ereignis wird i. d. R. nur für Informations- und Warnmeldungen ausgelöst, die vom Server gesendet werden. Wenn jedoch ein tatsächlicher Fehler auftritt, wird die Ausführung der ExecuteNonQuery oder ExecuteReader Methode, die den Servervorgang initiiert hat, angehalten und eine Ausnahme ausgelöst.
Wenn Sie die Verarbeitung der restlichen Anweisungen in einem Befehl unabhängig von den vom Server erzeugten Fehlern fortsetzen möchten, legen sie die FireInfoMessageEventOnUserErrors-Eigenschaft der SqlConnection auf true fest. Bei dieser Vorgehensweise wird bei Fehlern von der Verbindung das InfoMessage-Ereignis ausgelöst, anstatt eine Ausnahme auszulösen und die Verarbeitung zu unterbrechen. Die Clientanwendung kann dann dieses Ereignis behandeln und auf Fehlerbedingungen reagieren.
Hinweis
Wenn aufgrund eines Fehlers mit einem Schweregrad von 17 oder höher der Server die Verarbeitung des Befehls abbricht, muss dieser Fehler als Ausnahme behandelt werden. In diesem Fall wird unabhängig davon, wie der Fehler im InfoMessage-Ereignis behandelt wird, eine Ausnahme ausgelöst.
Arbeiten mit dem "StateChange"-Ereignis
Das StateChange Ereignis tritt auf, wenn sich der Zustand eines Connection ändert. Das StateChange Ereignis empfängt StateChangeEventArgs, mit dem Sie die Änderung des Zustands der Connection mithilfe der Eigenschaften OriginalState und CurrentState bestimmen können. Die OriginalState Eigenschaft ist eine ConnectionState Aufzählung, die den Status der Connection vor der Änderung angibt.
CurrentState ist eine ConnectionState Aufzählung, die den Zustand des Connection Zustands angibt, nachdem er geändert wurde.
Im folgenden Codebeispiel wird das StateChange-Ereignis verwendet, um eine Nachricht in die Konsole zu schreiben, wenn sich der Zustand der Connection ändert.
' Assumes connection represents a SqlConnection object.
AddHandler connection.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
// Assumes connection represents a SqlConnection object.
connection.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);
}