Événements de connexion

S'applique à : .NET Framework .NET .NET Standard

Télécharger ADO.NET

Le Fournisseur de données Microsoft SqlClient ont des objets Connexion à deux événements que vous pouvez utiliser pour extraire des messages d'information d'une source de données ou pour déterminer si l'état d'un objet Connexion a été modifié. La table suivante décrit les événements de l'objet Connexion.

Événement Description
InfoMessage Se produit lorsqu'un message d'information est retourné à partir d'une source de données. Les messages d’information sont des messages d’une source de données qui n’entraînent pas la levée d’une exception.
StateChange Se produit lorsque l'état de Connexion change.

Utiliser l’événement InfoMessage

Vous pouvez extraire des messages d'avertissement et d'information d'une source de données SQL Server à l'aide de l'événement InfoMessage de l'objet SqlConnection. Les erreurs retournées par la source de données, dont le niveau de gravité est compris entre 11 et 16, lèvent une exception. Toutefois, l’événement InfoMessage peut être utilisé pour obtenir des messages de la source de données qui ne sont pas associés à une erreur. Avec Microsoft SQL Server, toute erreur dont le niveau de gravité est inférieur ou égal à 10 est considérée comme un message d’information et peut être capturée à l’aide de l’événement InfoMessage. Pour plus d’informations, consultez l’article Niveaux de gravité des erreurs du moteur de base de données.

L’événement InfoMessage reçoit un objet SqlInfoMessageEventArgs contenant, dans sa propriété Erreurs, une collection des messages de la source de données. Vous pouvez interroger les objets Erreur dans cette collection pour obtenir le numéro d’erreur et le texte du message, ainsi que la source de l’erreur. Le Fournisseur de données Microsoft SqlClient pour SQL Server comprend également des détails sur la base de données, la procédure stockée et le numéro de ligne d’où provient le message.

Exemple

L'exemple de code suivant montre comment ajouter un gestionnaire d'événements pour l'événement InfoMessage.

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

Gérer les erreurs en tant que InfoMessages

L'événement InfoMessage se déclenche uniquement pour les messages d'information et d'avertissement en provenance du serveur. Toutefois, quand une erreur réelle se produit, l’exécution de la méthode ExecuteNonQuery ou ExecuteReader à l’origine de l’opération du serveur est arrêtée et une exception est levée.

Si vous souhaitez continuer à traiter le reste des instructions d'une commande indépendamment des erreurs générées par le serveur, définissez la propriété FireInfoMessageEventOnUserErrors de l'objet SqlConnection sur true. La définition de cette propriété amène la connexion à déclencher l’événement InfoMessage pour les erreurs au lieu de lever une exception et d’interrompre le traitement. L'application cliente peut ensuite gérer cet événement et répondre à des conditions d'erreur.

Notes

Une erreur dont le niveau de gravité est égal ou supérieur à 17 qui entraîne un arrêt de traitement de la commande par le serveur doit être gérée comme une exception. Dans ce cas, une exception est levée, indépendamment de la manière dont l'erreur est gérée dans l'événement InfoMessage.

Utiliser l’événement StateChange

L'événement StateChange se produit lorsque l'état de Connexion change. L'événement StateChange reçoit StateChangeEventArgs qui vous permet de déterminer la modification de l'état de Connexion à l'aide des propriétés OriginalState et CurrentState. La propriété OriginalState est une énumération ConnectionState qui indique l'état de Connexion avant sa modification. CurrentState est une énumération ConnectionState qui indique l'état de Connexion après sa modification.

L'exemple de code suivant utilise l'événement StateChange pour écrire un message sur la console lorsque l'état de Connexion change.

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

Voir aussi