Eventi di connessioneConnection Events

Tutti i provider di dati .NET Framework dispongono di connessione oggetti con due eventi che è possibile utilizzare per recuperare i messaggi informativi da un'origine dati o per determinare se lo stato di un connessione è modificato.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. Nella tabella seguente vengono descritti gli eventi del connessione oggetto.The following table describes the events of the Connection object.

eventEvent DescrizioneDescription
InfoMessageInfoMessage Si verifica quando un messaggio informativo viene restituito da un'origine dati.Occurs when an informational message is returned from a data source. I messaggi informativi sono i messaggi di un'origine dati per cui non viene generata un'eccezione.Informational messages are messages from a data source that do not result in an exception being thrown.
StateChangeStateChange Si verifica quando lo stato del connessione le modifiche.Occurs when the state of the Connection changes.

Utilizzo dell'evento InfoMessageWorking with the InfoMessage Event

È possibile recuperare avvisi e messaggi informativi da un'origine dati SQL Server usando l'evento InfoMessage dell'oggetto SqlConnection.You can retrieve warnings and informational messages from a SQL Server data source using the InfoMessage event of the SqlConnection object. Gli errori restituiti da un'origine dati con un livello di gravità compreso tra 11 e 16 generano un'eccezione.Errors returned from the data source with a severity level of 11 through 16 cause an exception to be thrown. Tuttavia, l'evento InfoMessage consente di ottenere dall'origine dati i messaggi che non sono associati a un errore.However, the InfoMessage event can be used to obtain messages from the data source that are not associated with an error. Nel caso di Microsoft SQL Server i messaggi di errore con una gravità uguale o minore di 10 sono considerati informativi e vengono acquisiti usando l'evento InfoMessage.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. Per altre informazioni, vedere l'argomento "Error Message Severity Levels" (Livelli di gravità dei messaggi di errore) nella documentazione online di SQL Server.For more information, see the "Error Message Severity Levels" topic in SQL Server Books Online.

Il InfoMessage evento riceve un SqlInfoMessageEventArgs oggetto che contiene, nella relativa errori , una raccolta di messaggi dall'origine dati.The InfoMessage event receives an SqlInfoMessageEventArgs object containing, in its Errors property, a collection of the messages from the data source. È possibile eseguire una query di errore oggetti della raccolta per il testo di un numero e il messaggio di errore, nonché l'origine dell'errore.You can query the Error objects in this collection for the error number and message text, as well as the source of the error. Il provider di dati .NET Framework per SQL Server include inoltre i dettagli sul database, sulla stored procedure e sul numero di riga da cui proviene il messaggio.The .NET Framework Data Provider for SQL Server also includes detail about the database, stored procedure, and line number that the message came from.

EsempioExample

Nell'esempio di codice seguente viene illustrato come aggiungere un gestore eventi per l'evento InfoMessage.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);  
  }  
}  

Gestione di errori come InfoMessageHandling Errors as InfoMessages

In genere, l'evento InfoMessage verrà generato solo per messaggi informativi e per messaggi di avviso inviati dal server.The InfoMessage event will normally fire only for informational and warning messages that are sent from the server. Tuttavia, quando si verifica un errore, l'esecuzione del ExecuteNonQuery o ExecuteReader metodo che ha avviato l'operazione del server viene interrotta e viene generata un'eccezione.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.

Per continuare a elaborare le restanti istruzioni di un comando indipendentemente da eventuali messaggi di errore generati dal server, impostare la proprietà FireInfoMessageEventOnUserErrors del tipo SqlConnection su true.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. In questo modo, invece di generare un'eccezione e di interrompere l'elaborazione, la connessione genera l'evento di errore InfoMessage.Doing this causes the connection to fire the InfoMessage event for errors instead of throwing an exception and interrupting processing. L'applicazione client può quindi gestire questo evento e rispondere alle condizioni di errore.The client application can then handle this event and respond to error conditions.

Nota

Un errore con un livello di gravità pari a 17 o superiore che provoca l'interruzione dell'elaborazione del comando da parte del server deve essere gestito come un'eccezione.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 questo caso viene generata un'eccezione indipendentemente da come viene gestito l'errore nell'evento InfoMessage.In this case, an exception is thrown regardless of how the error is handled in the InfoMessage event.

Utilizzo dell'evento StateChangeWorking with the StateChange Event

Il StateChange evento si verifica quando lo stato di un connessione le modifiche.The StateChange event occurs when the state of a Connection changes. Il StateChange riceve eventi StateChangeEventArgs che consentono di determinare la modifica dello stato del connessione utilizzando il OriginalState e CurrentState proprietà.The StateChange event receives StateChangeEventArgs that enable you to determine the change in state of the Connection by using the OriginalState and CurrentState properties. Il OriginalState proprietà è un ConnectionState enumerazione che indica lo stato del connessione prima della modifica.The OriginalState property is a ConnectionState enumeration that indicates the state of the Connection before it changed. CurrentState è un ConnectionState enumerazione che indica lo stato del connessione dopo che è stata modificata.CurrentState is a ConnectionState enumeration that indicates the state of the Connection after it changed.

Nell'esempio di codice viene illustrato come utilizzare il StateChange evento per scrivere un messaggio nella console quando lo stato del connessione le modifiche.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);  
}  

Vedere ancheSee Also

Connessione a un'origine datiConnecting to a Data Source
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center