VerbindungsereignisseConnection Events

Alle .NET Framework Datenanbieter verfügen über Verbindungs Objekte mit zwei Ereignissen, mit denen Sie Informationsmeldungen aus einer Datenquelle abrufen oder ermitteln können, ob sich der Status einer Verbindung geändert hat.All of the .NET Framework data providers have Connection objects with two events that you can use to retrieve informational messages from a data source or to determine if the state of a Connection has changed. In der folgenden Tabelle werden die Ereignisse des Connection -Objekts beschrieben.The following table describes the events of the Connection object.

eventEvent BeschreibungDescription
InfoMessageInfoMessage Dieses Ereignis tritt auf, wenn eine Informationsmeldung aus einer Datenquelle zurückgegeben wird.Occurs when an informational message is returned from a data source. Bei Informationsmeldungen handelt es sich um Meldungen aus einer Datenquelle, die keine Ausnahme auslösen.Informational messages are messages from a data source that do not result in an exception being thrown.
StateChangeStateChange Tritt auf, wenn sich der Zustand der Verbindung ändert.Occurs when the state of the Connection changes.

Arbeiten mit dem "InfoMessage"-EreignisWorking with the InfoMessage Event

Mit dem InfoMessage-Ereignis des SqlConnection-Objekts können Warnungen und Informationsmeldungen aus einer SQL Server-Datenquelle abgerufen werden.You can retrieve warnings and informational messages from a SQL Server data source using the InfoMessage event of the SqlConnection object. Wenn von einer Datenquelle Fehler mit einem Schweregrad zwischen 11 und 16 zurückgegeben werden, wird eine Ausnahme ausgelöst.Errors returned from the data source with a severity level of 11 through 16 cause an exception to be thrown. Mit dem InfoMessage-Ereignis können jedoch Meldungen aus der Datenquelle abgerufen werden, die keinem Fehler zugewiesen sind.However, the InfoMessage event can be used to obtain messages from the data source that are not associated with an error. Bei Microsoft SQL Server werden alle Meldungen mit einem Schweregrad von 10 oder weniger als Informationsmeldungen betrachtet und mit dem InfoMessage-Ereignis aufgezeichnet.In the case of Microsoft SQL Server, any error with a severity of 10 or less is considered to be an informational message, and can be captured by using the InfoMessage event. Weitere Informationen finden Sie im Artikel Datenbank-Engine Fehler Schweregrade .For more information, see the Database Engine Error Severities article.

Das InfoMessage -Ereignis empfängt SqlInfoMessageEventArgs ein Objekt, das in der Errors -Eigenschaft eine Sammlung der Nachrichten aus der Datenquelle enthält.The InfoMessage event receives an SqlInfoMessageEventArgs object containing, in its Errors property, a collection of the messages from the data source. Sie können die Fehler Objekte in dieser Sammlung nach der Fehlernummer und dem Meldungs Text und der Fehlerquelle Abfragen.You can query the Error objects in this collection for the error number and message text, as well as the source of the error. Der .NET Framework-Datenanbieter für SQL Server zeigt außerdem Details zu der Datenbank, der gespeicherten Prozedur und der Zeilennummer an, aus der die Meldung stammt.The .NET Framework Data Provider for SQL Server also includes detail about the database, stored procedure, and line number that the message came from.

BeispielExample

Im folgenden Codebeispiel wird veranschaulicht, wie für das InfoMessage-Ereignis ein Ereignishandler hinzugefügt wird.The following code example shows how to add an event handler for the InfoMessage event.

' 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"Handling Errors as InfoMessages

Das InfoMessage-Ereignis wird i. d. R. nur für Informations- und Warnmeldungen ausgelöst, die vom Server gesendet werden.The InfoMessage event will normally fire only for informational and warning messages that are sent from the server. Wenn jedoch ein tatsächlicher Fehler auftritt, wird die Ausführung der ExecuteNonQuery -Methode oder der ExecuteReader -Methode, die den Server Vorgang initiiert hat, angehalten, und es wird eine Ausnahme ausgelöst.However, when an actual error occurs, the execution of the ExecuteNonQuery or ExecuteReader method that initiated the server operation is halted and an exception is thrown.

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.If you want to continue processing the rest of the statements in a command regardless of any errors produced by the server, set the FireInfoMessageEventOnUserErrors property of the SqlConnection to true. Bei dieser Vorgehensweise wird bei Fehlern von der Verbindung das InfoMessage-Ereignis ausgelöst, anstatt eine Ausnahme auszulösen und die Verarbeitung zu unterbrechen.Doing this causes the connection to fire the InfoMessage event for errors instead of throwing an exception and interrupting processing. Die Clientanwendung kann dann dieses Ereignis behandeln und auf Fehlerbedingungen reagieren.The client application can then handle this event and respond to error conditions.

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.An error with a severity level of 17 or above that causes the server to stop processing the command must be handled as an exception. In diesem Fall wird unabhängig davon, wie der Fehler im InfoMessage-Ereignis behandelt wird, eine Ausnahme ausgelöst.In this case, an exception is thrown regardless of how the error is handled in the InfoMessage event.

Arbeiten mit dem "StateChange"-EreignisWorking with the StateChange Event

Das StateChange -Ereignis tritt auf, wenn sich der Status einer Verbindung ändert.The StateChange event occurs when the state of a Connection changes. Das StateChange -Ereignis StateChangeEventArgs empfängt, das es Ihnen ermöglicht, die Änderung des Zustands der Verbindung mithilfe der OriginalState -Eigenschaft und der CurrentState -Eigenschaft zu bestimmen.The StateChange event receives StateChangeEventArgs that enable you to determine the change in state of the Connection by using the OriginalState and CurrentState properties. Die OriginalState -Eigenschaft ist ConnectionState eine-Enumeration, die den Zustand der Verbindung vor der Änderung angibt.The OriginalState property is a ConnectionState enumeration that indicates the state of the Connection before it changed. CurrentState ist eine ConnectionState -Enumeration, die den Zustand der Verbindung angibt, nachdem Sie geändert wurde.CurrentState is a ConnectionState enumeration that indicates the state of the Connection after it changed.

Im folgenden Codebeispiel wird das StateChange -Ereignis verwendet, um eine Meldung in die Konsole zu schreiben, wenn sich der Zustand der Verbindung ändert.The following code example uses the StateChange event to write a message to the console when the state of the Connection changes.

' 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);  
}  

Siehe auchSee also