Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Todos os provedores de dados do .NET Framework têm Connection objetos com dois eventos que você pode usar para recuperar mensagens informativas de uma fonte de dados ou para determinar se o estado de um Connection foi alterado. A tabela a seguir descreve os eventos do Connection objeto.
| Acontecimento | Descrição |
|---|---|
| InfoMessage | Ocorre quando uma mensagem informativa é retornada de uma fonte de dados. As mensagens informativas são as mensagens de uma fonte de dados que não resultam em uma exceção sendo lançada. |
| MudançaDeEstado | Ocorre quando o estado de Connection é alterado. |
Trabalhando com o evento InfoMessage
Você pode recuperar avisos e mensagens informativas de uma fonte de dados do SQL Server usando o evento InfoMessage do objeto SqlConnection. Os erros retornados da fonte de dados com um nível de severidade de 11 a 16 geram uma exceção. No entanto, o InfoMessage evento pode ser usado para obter mensagens da fonte de dados que não estão associadas a um erro. No caso do Microsoft SQL Server, qualquer erro com uma severidade de 10 ou menos é considerado uma mensagem informativa e pode ser capturado usando o InfoMessage evento. Para saber mais, leia o artigo Severidade dos erros do Mecanismo de Banco de Dados.
O InfoMessage evento recebe um SqlInfoMessageEventArgs objeto que contém, em sua Errors propriedade, uma coleção de mensagens da fonte de dados. Você pode consultar os Error objetos nesta coleção para obter o número de erro e o texto da mensagem, bem como a origem do erro. O Provedor de Dados do .NET Framework para SQL Server também inclui detalhes sobre o banco de dados, o procedimento armazenado e o número de linha do qual a mensagem veio.
Exemplo
O exemplo de código a seguir mostra como adicionar um manipulador de eventos para o 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);
}
}
Tratando erros como InfoMessages
O evento InfoMessage acionará normalmente apenas para mensagens informativas e de aviso que são enviadas do 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 você quiser continuar a processar o restante das instruções em um comando independentemente de qualquer erro gerado pelo servidor, defina a propriedade FireInfoMessageEventOnUserErrors do SqlConnection como true. Isso faz com que a conexão dispare o evento InfoMessage para erros, em vez de lançar uma exceção e interromper o processamento. O aplicativo cliente pode, em seguida, manipular esse evento e responder às condições de erro.
Observação
Um erro com um nível de severidade de 17 ou acima disso faz o servidor parar de processar o comando e deve ser tratado como uma exceção. Nesse caso, uma exceção é gerada independentemente de como o erro é tratado no evento InfoMessage.
Trabalhando com o evento StateChange
O evento StateChange ocorre quando o estado de Connection altera. O StateChange evento recebe StateChangeEventArgs que permitem determinar a alteração no estado do Connection usando as propriedades OriginalState e CurrentState. A propriedade OriginalState é uma enumeração ConnectionState que indica o estado do Connection antes de ser alterado.
CurrentState é uma enumeração ConnectionState que indica o estado do Connection após sua alteração.
O exemplo de código a seguir usa o evento StateChange para escrever uma mensagem no console quando o estado do Connection é alterado.
' 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);
}