Eventos de conexión

Se aplica a: .NET Framework .NET .NET Standard

Descargar ADO.NET

Todos los proveedores de datos SqlClient de Microsoft tienen objetos Connection con dos eventos que se pueden utilizar para recuperar mensajes informativos de 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 mensajes de un origen de datos que no tienen como resultado una excepción.
StateChange Se produce cuando cambia el estado del objeto Connection.

Trabajo 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 evento InfoMessage se puede usar para obtener mensajes del origen de datos que no están asociados a un error. Con Microsoft SQL Server, cualquier error con una gravedad de 10 o menos se considera un mensaje informativo y se puede capturar mediante el evento InfoMessage. Para obtener más información, consulte el artículo Niveles de gravedad de error del motor de base de datos.

El evento InfoMessage recibe un objeto SqlInfoMessageEventArgs 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 SqlClient de Microsoft para SQL Server también incluye detalles acerca de 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.
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);
        }
    };

Gestión de errores como eventos InfoMessage

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 de los métodos ExecuteNonQuery o ExecuteReader que comenzaron la operación del servidor y se inicia 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. Al establecer esta propiedad, la conexión activa el evento InfoMessage en busca de errores en lugar de producir 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.

Trabajo con el evento StateChange

El evento StateChange se produce cuando cambia el estado de un objeto Connection. El evento StateChange recibe la clase StateChangeEventArgs, que permite determinar el cambio de 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 del objeto Connection después del cambio.

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

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

Vea también