Partilhar via


Eventos de ligação

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

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

Consulte também