Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: .NET Framework
.NET
.NET Standard
O Microsoft SqlClient Data Provider para SQL Server tem objetos Connection com dois eventos que pode usar para recuperar mensagens informativas de uma fonte de dados ou para determinar se o estado de uma Connection mudou. A tabela seguinte descreve os eventos do objeto Conexão .
| Event | Description |
|---|---|
| MensagemInformativa | Ocorre quando uma mensagem informativa é retornada de uma fonte de dados. Mensagens informativas são mensagens provenientes de uma fonte de dados que não resultam no lançamento de uma exceção. |
| Mudança de Estado | Ocorre quando o estado da Conexão muda. |
Trabalhar com o evento InfoMessage
Você pode recuperar avisos e mensagens informativas de uma fonte de dados do SQL Server usando o InfoMessage evento do SqlConnection objeto. Erros retornados da fonte de dados com um nível de gravidade de 11 a 16 causam que uma exceção seja lançada. No entanto, o InfoMessage evento pode ser usado para obter mensagens da fonte de dados que não estejam associadas a um erro. Com o Microsoft SQL Server, qualquer erro com gravidade de 10 ou menos é considerado uma mensagem informativa e pode ser capturado usando o InfoMessage evento. Para obter mais informações, consulte o artigo Severidades de erro do mecanismo de banco de dados .
O InfoMessage evento recebe um SqlInfoMessageEventArgs objeto que contém, na sua propriedade Erros , uma coleção das mensagens da fonte de dados. Pode consultar os objetos Erro desta coleção para obter o número de erro, o texto da mensagem e a origem do erro. O Microsoft SqlClient Data Provider para SQL Server inclui também detalhes sobre a base de dados, o procedimento armazenado e o número de linha de onde veio a mensagem.
Example
O exemplo de código a seguir mostra como adicionar um manipulador de eventos para o InfoMessage evento.
// Assumes that connection represents a SqlConnection object.
connection.InfoMessage +=
(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);
}
};
Lidar com erros como mensagens informativas
Normalmente, o evento InfoMessage será acionado apenas para mensagens informativas e de aviso enviadas pelo servidor. No entanto, quando ocorre um erro real, a execução do método ExecuteNonQuery ou ExecuteReader que iniciou a operação do servidor é interrompida e uma exceção é lançada.
Se quiser continuar a processar o restante das instruções de um comando, independentemente de quaisquer erros produzidos pelo servidor, defina a propriedade do FireInfoMessageEventOnUserErrors para SqlConnection. Definir esta propriedade faz com que a ligação dispare o InfoMessage evento para erros em vez de lançar uma exceção e interromper o processamento. O aplicativo cliente pode então manipular esse evento e responder a condições de erro.
Observação
Um erro com um nível de gravidade igual ou superior a 17 que faça com que o servidor pare de processar o comando deve ser tratado como uma exceção. Nesse caso, uma exceção é lançada, independentemente de como o erro é tratado no InfoMessage evento.
Trabalhar com o evento StateChange
O evento StateChange ocorre quando o estado de uma Ligação muda. O evento StateChange recebe StateChangeEventArgs que lhe permite determinar a alteração do estado da Ligação usando as propriedades OriginalState e CurrentState . A propriedade OriginalState é uma ConnectionState enumeração que indica o estado da Conexão antes de esta alterar. CurrentState é uma ConnectionState enumeração que indica o estado da Conexão após a sua alteração.
O exemplo de código seguinte utiliza o evento StateChange para escrever uma mensagem na consola quando o estado da Ligação muda.
// Assumes that connection represents a SqlConnection object.
connection.StateChange +=
(object sender, StateChangeEventArgs args) =>
{
Console.WriteLine(
"The current Connection state has changed from {0} to {1}.",
args.OriginalState, args.CurrentState);
};