Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich mein Programm benachrichtigen, wenn die Datenbank aktualisiert wurde?

Abfragedatenbank ist keine sehr elegante Lösung.

SqlDependency von ADO.NET wird in Ihrem Fall nützlich sein. Es verwendet keinen Abfrage-, sondern einen Benachrichtigungsmechanismus. Die Benachrichtigungen werden von Service Broker in Ihrer Datenbank bereitgestellt, daher müssen Sie diesen Dienst in Ihrer Datenbank aktivieren. Der OnChange Das Ereignis wird ausgelöst, wenn sich die angegebene Tabelle ändert (aktualisieren, löschen, einfügen..)

Hier ist ein Beispiel für die Verwendung von 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);
}

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

So aktivieren Sie Service Broker (beachten Sie, dass Sie dazu die Exklusivität für die Datenbank haben – am besten nach einem Neustart des SQL-Servers):http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx (Defekter Link)

Möglicher alternativer Link:http://technet. microsoft.com/en-us/library/ms166086(v=sql.105).aspx