sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo notificar a mi programa cuando se ha actualizado la base de datos?

La base de datos de sondeo no es una solución muy elegante.

SqlDependency de ADO.NET será útil en su caso. No utiliza un mecanismo de sondeo sino de notificación. Service Broker proporciona las notificaciones en su base de datos, por lo que deberá habilitar este servicio en su base de datos. El OnChange el evento se generará cuando la tabla especificada cambie (actualizar, eliminar, insertar...)

Aquí hay un ejemplo de cómo usar SqlDependency:

void Initialization()
{
    // Create a dependency connection.
    SqlDependency.Start(connectionString, queueName);
}

void SomeMethod()
{
    // Assume connection is an open SqlConnection.

    // Create a new SqlCommand object.
    using (SqlCommand command=new SqlCommand(
        "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", 
        connection))
    {

        // Create a dependency and associate it with the SqlCommand.
        SqlDependency dependency=new SqlDependency(command);
        // Maintain the refence in a class member.

        // Subscribe to the SqlDependency event.
        dependency.OnChange+=new
           OnChangeEventHandler(OnDependencyChange);

        // Execute the command.
        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}

// Handler method
void OnDependencyChange(object sender, 
   SqlNotificationEventArgs e )
{
  // Handle the event (for example, invalidate this cache entry).
}

void Termination()
{
    // Release the dependency.
    SqlDependency.Stop(connectionString, queueName);
}

de http://msdn.microsoft.com/en-us/library/ 62xk7953.aspx

Aquí se explica cómo habilitar Service Broker (tenga en cuenta que tendrá exclusividad en la base de datos para hacerlo; es mejor hacerlo después de reiniciar el servidor sql):http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx (Enlace roto)

Posible enlace alternativo:http://technet. microsoft.com/en-us/library/ms166086(v=sql.105).aspx