Compartir por


Eventos de conexión

Todos los proveedores de datos de .NET Framework tienen Connection objetos con dos eventos que puede usar para recuperar mensajes informativos de un origen de datos o para determinar si el estado de un Connection objeto ha cambiado. En la tabla siguiente se describen los eventos del Connection objeto .

Evento Descripción
MensajeInformativo Se produce cuando se devuelve un mensaje informativo desde un origen de datos. Los mensajes informativos son mensajes de un origen de datos que no generan una excepción.
CambioDeEstado Ocurre cuando cambia el estado del Connection.

Trabajar con el evento InfoMessage

Con el evento InfoMessage del objeto SqlConnection puede recuperar advertencias o mensajes informativos de un origen de datos de SQL Server. Si se devuelven errores desde el origen de datos con un nivel de seguridad entre 11 y 16, se inicia una excepción. Sin embargo, el InfoMessage evento 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 error con una gravedad de 10 o menos se considera un mensaje informativo y se puede capturar mediante el InfoMessage evento . Para obtener más información, consulte el artículo Niveles de gravedad de error del motor de base de datos.

El InfoMessage evento recibe un SqlInfoMessageEventArgs objeto que contiene, en su Errors propiedad, una colección de los mensajes del origen de datos. Puede consultar los Error objetos de esta colección para ver 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 también incluye detalles sobre la base de datos, el procedimiento almacenado y el número de línea del que procede el mensaje.

Ejemplo

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

Controlar errores como InfoMessages

Normalmente, el evento InfoMessage solo se activa para mensajes informativos y de advertencia enviados desde el servidor. Sin embargo, cuando se produce un error real, se detiene la ejecución del ExecuteNonQuery método o ExecuteReader que inició la operación del servidor y se produce una excepción.

Si desea seguir procesando el resto de las instrucciones de un comando, independientemente de los errores producidos en el servidor, establezca la propiedad FireInfoMessageEventOnUserErrors de SqlConnection como true. De esta forma, la conexión activa el evento InfoMessage para errores, en lugar de iniciar una excepción e interrumpir el procesamiento. La aplicación cliente puede controlar el evento y reaccionar ante las situaciones de error.

Nota:

Los errores con un nivel de gravedad de 17, como mínimo, que hacen que el servidor interrumpa el procesamiento de comandos, deben controlarse como excepciones. En este caso, se inicia una excepción, independientemente del modo en que se controle el error en el evento InfoMessage.

Trabajar con el evento StateChange

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

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

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

Consulte también