Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Tutti i provider di dati .NET Framework dispongono di oggetti Connection con due eventi che è possibile usare per recuperare i messaggi informativi da un'origine dati o per determinare se lo stato di una connessione è stato modificato. Nella tabella seguente vengono descritti gli eventi dell'oggetto Connection .
Evento | Descrizione |
---|---|
MessaggioInformativo | Si verifica quando viene restituito un messaggio informativo da un'origine dati. I messaggi informativi sono messaggi provenienti da una fonte di dati che non comportano il lancio di un'eccezione. |
CambioStato | Si verifica quando lo stato della connessione cambia. |
Utilizzo dell'evento InfoMessage
È possibile recuperare avvisi e messaggi informativi da un'origine dati di SQL Server usando l'evento InfoMessage dell'oggetto SqlConnection . Gli errori restituiti dall'origine dati con un livello di gravità compreso tra 11 e 16 causano la generazione di un'eccezione. Tuttavia, l'evento InfoMessage può essere usato per ottenere messaggi dall'origine dati che non sono associati a un errore. Nel caso di Microsoft SQL Server, qualsiasi errore con gravità pari o inferiore a 10 viene considerato un messaggio informativo e può essere acquisito usando l'evento InfoMessage . Per altre informazioni, vedere l'articolo Gravità degli errori del motore di database .
L'evento InfoMessage riceve un SqlInfoMessageEventArgs oggetto contenente, nella relativa proprietà Errors , una raccolta di messaggi dall'origine dati. È possibile eseguire una query sugli oggetti Error in questa raccolta per il numero di errore e il testo del messaggio, nonché l'origine dell'errore. Il provider di dati .NET Framework per SQL Server include anche informazioni dettagliate sul database, la stored procedure e il numero di riga da cui proviene il messaggio.
Esempio
Nell'esempio di codice seguente viene illustrato come aggiungere un gestore eventi per l'evento InfoMessage .
' 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);
}
}
Gestire gli errori come messaggi informativi
L'evento InfoMessage viene in genere generato solo per i messaggi informativi e di avviso inviati dal server. Tuttavia, quando si verifica un errore effettivo, l'esecuzione del metodo ExecuteNonQuery o ExecuteReader che ha avviato l'operazione server viene interrotta e viene generata un'eccezione.
Se si desidera continuare a elaborare il resto delle istruzioni in un comando indipendentemente dagli eventuali errori generati dal server, impostare la FireInfoMessageEventOnUserErrors proprietà di SqlConnection su true
. In questo modo la connessione genera l'evento InfoMessage per gli errori anziché generare un'eccezione e interrompere l'elaborazione. L'applicazione client può quindi gestire questo evento e rispondere alle condizioni di errore.
Annotazioni
Un errore con un livello di gravità pari a 17 o superiore che causa l'arresto dell'elaborazione del comando da parte del server deve essere gestito come un'eccezione. In questo caso, viene generata un'eccezione indipendentemente dalla modalità di gestione dell'errore nell'evento InfoMessage .
Utilizzo dell'evento StateChange
L'evento StateChange si verifica quando lo stato di una connessione cambia. L'evento StateChange riceve StateChangeEventArgs che consente di determinare la modifica nello stato della connessione utilizzando le proprietà OriginalState e CurrentState . La proprietà OriginalState è un'enumerazione ConnectionState che indica lo stato della connessione prima della modifica. CurrentState è un'enumerazione ConnectionState che indica lo stato della connessione dopo la modifica.
Nell'esempio di codice seguente viene utilizzato l'evento StateChange per scrivere un messaggio nella console quando lo stato della connessione viene modificato.
' 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);
}