Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je notifier mon programme lorsque la base de données a été mise à jour ?

La base de données d'interrogation n'est pas une solution très élégante.

SqlDependency d'ADO.NET sera utile dans votre cas. Il n'utilise pas d'interrogation mais un mécanisme de notification. Les notifications sont fournies par Service Broker dans votre base de données, vous devrez donc activer ce service dans votre base de données. Le OnChange l'événement se déclenchera lorsque la table spécifiée changera (mise à jour, suppression, insertion ..)

Voici un exemple d'utilisation de 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

Voici comment activer Service Broker (notez que vous aurez l'exclusivité sur la base de données pour le faire - il est préférable de le faire après le redémarrage du serveur sql) :http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx (Lien brisé)

Lien alternatif possible :http://technet. microsoft.com/en-us/library/ms166086(v=sql.105).aspx