Partager via


Utilisation des événements Connection

L'objet Connection a deux événements que vous pouvez utiliser pour extraire des messages informationnels d'une source de données ou pour déterminer si l'état de Connection a été modifié. Le tableau suivant répertorie les événements de l'objet Connection.

Event Description
InfoMessage Se produit lorsqu'un message informationnel est retourné à partir d'une source de données. Les messages informationnels sont des messages provenant d'une source de données qui ne résultent pas en la levée d'une exception.
StateChange Se produit lorsque l'état de Connection change.

InfoMessage

Vous pouvez extraire avertissements et messages informationnels d'une source de données à l'aide de l'événement InfoMessage de l'objet Connection. Les erreurs retournées de la source de données résultent en la levée d'une exception. L'événement InfoMessage peut néanmoins ê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, tout message ayant une gravité inférieure ou égale à 10 est considéré comme étant informationnel et est capturé à l'aide de l'événement InfoMessage.

L'événement InfoMessage reçoit un objet InfoMessageEventArgs contenant, dans sa propriété Errors, une collection des messages de la source de données. Vous pouvez interroger les objets Error 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 .NET Framework pour SQL Server contient aussi des détails concernant la base de données, la procédure stockée et le numéro de la ligne d'origine du message.

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

SqlClient

  Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")

  AddHandler nwindConn.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
[C#]
  SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

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

OleDb

  Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;")

  AddHandler nwindConn.InfoMessage, New OleDbInfoMessageEventHandler(AddressOf OnInfoMessage)


Private Shared Sub OnInfoMessage(sender As Object, args As OleDbInfoMessageEventArgs)
  Dim err As OleDbError
  For Each err In args.Errors
    Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}", _
                      err.Source, err.SQLState, err.NativeError, err.Message)
  Next
End Sub
[C#]
  OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

  nwindConn.InfoMessage  += new OleDbInfoMessageEventHandler(OnInfoMessage);


protected static void OnInfoMessage(object sender, OleDbInfoMessageEventArgs args)
{
  foreach (OleDbError err in args.Errors)
  {
    Console.WriteLine("The {0} has received a SQLState {1} error number {2}:\n{3}",
                      err.Source, err.SQLState, err.NativeError, err.Message);
  }
}

StateChange

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

  AddHandler nwindConn.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
[C#]
  nwindConn.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

Utilisation des fournisseurs de données .NET Framework pour l'accès aux données