Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso notificar meu programa quando o banco de dados for atualizado?


Banco de dados de pesquisa não é uma solução muito elegante.

SqlDependency do ADO.NET será útil no seu caso. Ele não usa polling, mas mecanismo de notificação. As notificações são fornecidas pelo Service Broker em seu banco de dados, portanto, será necessário habilitar este serviço em seu banco de dados. O OnChange O evento será gerado quando a tabela especificada for alterada (atualizar, excluir, inserir ..)

Aqui está um exemplo de como 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

Aqui está como habilitar o Service Broker (observe que você terá exclusividade no banco de dados para fazer isso - melhor fazê-lo após a reinicialização do servidor sql):http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx (Link quebrado)

Possível link alternativo:http://technet. microsoft.com/en-us/library/ms166086(v=sql.105).aspx