Partilhar via


Eventos de conexão

Todos os provedores de dados do .NET Framework têm objetos Connection com dois eventos que você pode usar para recuperar mensagens informativas de uma fonte de dados ou para determinar se o estado de uma Conexão foi alterado. A tabela a seguir descreve os eventos do objeto Connection .

Evento Descrição
Mensagem de Informação Ocorre quando uma mensagem informativa é retornada de uma fonte de dados. Mensagens informativas são mensagens de uma fonte de dados que não resultam em uma exceção sendo lançada.
Mudança de Estado Ocorre quando o estado da Conexão muda.

Trabalhando 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 fazem com 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 estão associadas a um erro. No caso do Microsoft SQL Server, qualquer erro com gravidade igual ou inferior a 10 é 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, em sua propriedade Errors , uma coleção das mensagens da fonte de dados. Você pode consultar os objetos Error nesta coleção para o número do 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 da linha de onde a mensagem veio.

Exemplo

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

Manipulando erros como InfoMessages

Normalmente, InfoMessage o evento será acionado apenas para mensagens informativas e de aviso 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 processando o restante das instruções em um comando, independentemente de quaisquer erros produzidos pelo servidor, defina a FireInfoMessageEventOnUserErrors SqlConnection propriedade do como true. Isso faz com que a conexã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.

Nota

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.

Trabalhando com o evento StateChange

O evento StateChange ocorre quando o estado de uma conexão é alterado. O evento StateChange recebe StateChangeEventArgs que permite determinar a alteração no estado da Conexão usando as propriedades OriginalState e CurrentState . A propriedade OriginalState é uma ConnectionState enumeração que indica o estado da Connection antes de ser alterada. CurrentState é uma ConnectionState enumeração que indica o estado da Connection depois que ela foi alterada.

O exemplo de código a seguir usa o evento StateChange para gravar uma mensagem no console quando o estado da conexão é 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);  
}  

Consulte também