VerbindungsereignisseConnection Events

Alle von .NET Framework-Datenanbietern Verbindung Objekte mit zwei Ereignisse, die Sie verwenden können, um informationsmeldungen aus einer Datenquelle abzurufen oder zu bestimmen, ob der Status der eine Verbindung hat geändert.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. Die folgende Tabelle beschreibt die Ereignisse der Verbindung Objekt.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 der Status der der Verbindung Änderungen.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 unter den Schweregrade von Datenbank-Engine-Fehler Artikel.For more information, see the Database Engine Error Severities article.

Die InfoMessage -Ereignis empfängt ein SqlInfoMessageEventArgs Objekt enthält, in dessen Fehler -Eigenschaft, die eine Auflistung von Nachrichten aus der Datenquelle.The InfoMessage event receives an SqlInfoMessageEventArgs object containing, in its Errors property, a collection of the messages from the data source. Sie können Abfragen, die Fehler Objekte in dieser Auflistung für den Fehlertext und dem Meldungstext sowie die Ursache des Fehlers.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. Jedoch, wenn ein tatsächlicher Fehler auftritt, die Ausführung der ExecuteNonQuery oder "ExecuteReader" -Methode, die den Servervorgang initialisiert hat, angehalten, und 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

Die StateChange Ereignis tritt auf, wenn der Status der eine Verbindung Änderungen.The StateChange event occurs when the state of a Connection changes. Die StateChange -Ereignis empfängt StateChangeEventArgs , mit denen Sie bestimmen, der die Änderung des von der Verbindung mithilfe der OriginalState und CurrentState Eigenschaften.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 eine ConnectionState -Enumeration, die den Status der gibt an die Verbindung vor der Änderung.The OriginalState property is a ConnectionState enumeration that indicates the state of the Connection before it changed. CurrentState ist eine ConnectionState -Enumeration, die den Status der gibt an die Verbindung nach der Änderung.CurrentState is a ConnectionState enumeration that indicates the state of the Connection after it changed.

Im folgenden Codebeispiel wird die StateChange Ereignis, um eine Nachricht an die Konsole schreiben bei den Status des der Verbindung Änderungen.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