Compartir a través de


Trabajar con eventos de conexión

El objeto Connection tiene dos eventos que puede usar para recuperar mensajes informativos desde un origen de datos o para determinar si ha cambiado el estado de un objeto Connection. En la tabla siguiente se enumeran los eventos del objeto Connection.

Evento Descripción
InfoMessage Se produce cuando se devuelve un mensaje informativo desde un origen de datos. Los mensajes informativos son aquellos procedentes de orígenes de datos que no inician una excepción.
StateChange Se produce cuando cambia el estado del objeto Connection.

InfoMessage

Con el evento InfoMessage del objeto Connection puede recuperar advertencias o mensajes informativos desde un origen de datos. Los errores que devuelve el origen de datos inician una excepción. Sin embargo, el evento InfoMessage se puede usar para obtener mensajes del origen de datos que no estén asociados a un error. En el caso de Microsoft SQL Server, cualquier mensaje que tenga la gravedad 10, como máximo, se considera de tipo informativo y se captura mediante el evento InfoMessage.

El evento InfoMessage recibe un objeto InfoMessageEventArgs que contiene en su propiedad Errors una colección de los mensajes del origen de datos. Puede consultar los objetos Error de esa colección para conocer el número de error y el texto del mensaje, así como el origen del error. El proveedor de datos de .NET Framework para SQL Server incluye asimismo datos acerca de la base de datos, el procedimiento almacenado y el número de línea donde se originó el mensaje.

En el ejemplo de código siguiente se muestra cómo se puede agregar un controlador de eventos para el evento 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

El evento StateChange se produce cuando cambia el estado de un objeto Connection. El evento StateChange recibe argumentos StateChangeEventArgs que permiten determinar el cambio del estado de Connection por medio de las propiedades OriginalState y CurrentState. La propiedad OriginalState es una enumeración ConnectionState que indica el estado del objeto Connection antes del cambio. CurrentState es una enumeración ConnectionState que indica el estado de Connection después del cambio.

En el ejemplo de código siguiente se usa el evento StateChange para escribir un mensaje en la consola cuando cambia el estado de la conexión.

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

Vea también

Utilizar proveedores de datos de .NET Framework para obtener acceso a datos