Freigeben über


Verbindungsereignisse

Gilt für: .NET Framework .NET .NET Standard

Herunterladen von ADO.NET

Der Microsoft SqlClient-Datenanbieter für SQL Server verfügt über Connection-Objekte mit zwei Ereignissen, mit denen Sie Informationsmeldungen aus einer Datenquelle abrufen oder eine Zustandsänderung eines Connection-Objekts feststellen können. 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.
StateChange Tritt auf, wenn sich der Zustand des Connection-Objekts ä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 der Errors-Eigenschaft eine Sammlung der Meldungen aus einer Datenquelle enthält. Die Error-Objekte in dieser Sammlung können auf Fehlernummer, Meldungstext und Fehlerquelle abgefragt werden. Der Microsoft SqlClient-Datenanbieter für SQL Server enthält auch Details zur Datenbank, gespeicherten Prozedur und Nummer der Zeile, aus der die Meldung 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.
connection.InfoMessage +=
    (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. Bei einem tatsächlichen Fehler wird die Ausführung der ExecuteNonQuery-Methode oder ExecuteReader-Methode, die den Servervorgang begonnen 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. Das Festlegen dieser Eigenschaft bewirkt, dass die Verbindung das InfoMessage-Ereignis für Fehler auslö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-Objekts ändert. Das StateChange-Ereignis erhält StateChangeEventArgs, mit denen Sie anhand der OriginalState-Eigenschaft und CurrentState-Eigenschaft Zustandsänderungen des Connection-Objekts ermitteln können. Die OriginalState-Eigenschaft ist eine ConnectionState-Enumeration, die den Zustand des Connection-Objekts vor der Änderung angibt. CurrentState ist eine ConnectionState-Enumeration, die den Zustand des Connection-Objekts nach der Änderung angibt.

Im folgenden Codebeispiel wird mit dem StateChange-Ereignis eine Meldung in die Konsole geschrieben, sobald sich der Zustand des Connection-Objekts ändert.

// Assumes that connection represents a SqlConnection object.
connection.StateChange +=
    (object sender, StateChangeEventArgs args) =>
    {
        Console.WriteLine(
          "The current Connection state has changed from {0} to {1}.",
            args.OriginalState, args.CurrentState);
    };

Weitere Informationen