Condividi tramite


Utilizzo di eventi di connessione

L'oggetto Connection dispone di due eventi che è possibile utilizzare per recuperare messaggi informativi da un'origine dati o per determinare se lo stato di un oggetto Connection è stato modificato. Nella tabella seguente sono elencati gli eventi dell'oggetto Connection.

Evento Descrizione
InfoMessage Si verifica quando un messaggio informativo viene restituito da un'origine dati. I messaggi informativi sono i messaggi di un'origine dati per cui non viene generata un'eccezione.
StateChange Si verifica quando lo stato dell'oggetto Connection cambia.

InfoMessage

È possibile recuperare avvisi e messaggi informativi da un'origine dati utilizzando l'evento InfoMessage dell'oggetto Connection. Gli errori restituiti dall'origine dati generano un'eccezione. L'evento InfoMessage consente di ottenere dall'origine dati i messaggi che non sono associati a un errore. Nel caso di Microsoft SQL Server, i messaggi con una gravità uguale o minore di 10 sono considerati informativi e vengono acquisiti utilizzando l'evento InfoMessage.

L'evento InfoMessage riceve un oggetto InfoMessageEventArgs che contiene, nella proprietà Errors, un insieme di messaggi di un'origine dati. È possibile richiedere agli oggetti Error di questo insieme il numero di errore e il testo del messaggio così come l'origine dell'errore. 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.

Nell'esempio di codice seguente viene illustrato come aggiungere un gestore eventi per l'evento InfoMessage.

SqlClient

  Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")

  AddHandler nwindConn.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
[C#]
  SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

  nwindConn.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);
  }
}

OleDb

  Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")

  AddHandler nwindConn.InfoMessage, New OleDbInfoMessageEventHandler(AddressOf OnInfoMessage)


Private Shared Sub OnInfoMessage(sender As Object, args As OleDbInfoMessageEventArgs)
  Dim err As OleDbError
  For Each err In args.Errors
    Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}", _
                      err.Source, err.SQLState, err.NativeError, err.Message)
  Next
End Sub
[C#]
  OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

  nwindConn.InfoMessage  += new OleDbInfoMessageEventHandler(OnInfoMessage);


protected static void OnInfoMessage(object sender, OleDbInfoMessageEventArgs args)
{
  foreach (OleDbError err in args.Errors)
  {
    Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}",
                      err.Source, err.SQLState, err.NativeError, err.Message);
  }
}

StateChange

L'evento StateChange si verifica quando viene modificato lo stato di un oggetto Connection. L'evento StateChange riceve StateChangeEventArgs che consente di determinare la modifica dello stato dell'oggetto Connection utilizzando le proprietà OriginalState e CurrentState. La proprietà OriginalState è un'enumerazione di ConnectionState che indica lo stato dell'oggetto Connection prima della modifica. CurrentState è un'enumerazione di ConnectionState che indica lo stato dell'oggetto Connection dopo la modifica.

Nell'esempio di codice seguente viene utilizzato l'evento StateChange per scrivere un messaggio alla console quando lo stato dell'oggetto Connection cambia.

  AddHandler nwindConn.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
[C#]
  nwindConn.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 anche

Utilizzo di provider di dati .NET Framework per accedere ai dati