Partager via


Événements de connexion

Tous les fournisseurs de données .NET Framework ont Connection des objets avec deux événements que vous pouvez utiliser pour récupérer des messages d’information à partir d’une source de données ou pour déterminer si l’état d’un Connection fichier a changé. Le tableau suivant décrit les événements de l’objet Connection .

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

Travailler avec 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. Dans le cas de Microsoft SQL Server, toute erreur avec une gravité de 10 ou moins 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 SqlInfoMessageEventArgs objet contenant, dans sa Errors propriété, une collection des messages de la source de données. Vous pouvez interroger les Error objets de cette collection pour le numéro d’erreur et le texte du message, ainsi que la source de l’erreur. Le fournisseur de données .NET Framework pour SQL Server inclut également des détails sur la base de données, la procédure stockée et le numéro de ligne à partir duquel le message provient.

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

Gestion des erreurs comme des InfoMessages

L'événement InfoMessage se déclenche uniquement pour les messages d'information et d'avertissement en provenance du serveur. Toutefois, lorsqu'une erreur réelle se produit, l'exécution de la méthode ExecuteNonQuery ou ExecuteReader qui a initié l'opération du serveur est interrompue 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. Cela a pour effet de déclencher l'événement InfoMessage pour des 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.

Remarque

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.

Travailler avec l’événement StateChange

L’événement StateChange se produit lorsque l’état d’un Connection change. L’événement StateChange reçoit StateChangeEventArgs qui vous permettent de déterminer le changement d’état de l’objet Connection à l’aide des propriétés OriginalState et CurrentState. La OriginalState propriété est une ConnectionState énumération qui indique l’état de la Connection propriété avant sa modification. CurrentState est une ConnectionState énumération qui indique l'état de Connection 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 Connection change.

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

Voir aussi