Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um objeto pode ser associado a um SqlDependency para detetar quando os resultados da SqlCommand consulta diferem dos resultados originalmente recuperados. Também podes atribuir um delegado ao OnChange evento, que será ativado quando os resultados mudarem para um comando associado. Associe-o SqlDependency ao comando antes de executá-lo. A HasChanges propriedade do SqlDependency também pode ser usada para determinar se os resultados da consulta mudaram desde que os dados foram recuperados pela primeira vez.
Considerações de segurança
Baseia-se numa infraestrutura de dependência em que um SqlConnection é aberto quando Start é chamado para receber notificações de alterações nos dados subjacentes de um determinado comando. A capacidade de um cliente iniciar a chamada SqlDependency.Start é controlada pela utilização de SqlClientPermission e dos atributos de segurança de acesso ao código. Para mais informações, consulte Ativar notificações de consultas.
Example
Os passos seguintes ilustram como declarar uma dependência, executar um comando e receber uma notificação quando o conjunto de resultados muda:
Inicie uma
SqlDependencyligação ao servidor.Criar objetos SqlConnection e SqlCommand para ligar ao servidor e definir uma instrução Transact-SQL.
Cria um novo
SqlDependencyobjeto, ou usa um existente, e liga-o aoSqlCommandobjeto. Internamente, esta associação cria um SqlNotificationRequest objeto e liga-o ao objeto de comando conforme necessário. Este pedido de notificação contém um identificador interno que identifica de forma única esteSqlDependencyobjeto. Também inicia o ouvinte cliente se este ainda não estiver ativo.Inscreva um gestor de eventos no evento
OnChangedo objetoSqlDependency.Execute o comando usando qualquer um dos
Executemétodos doSqlCommandobjeto. Como o comando está associado ao objeto de notificação, o servidor reconhece que deve gerar uma notificação, e a informação da fila aponta para a fila de dependências.Corta a
SqlDependencyligação ao servidor.
Se algum utilizador alterar os dados subjacentes, o Microsoft SQL Server deteta que há uma notificação pendente para tal alteração e publica uma notificação que é processada e encaminhada para o cliente através do subjacente SqlConnection criado ao chamar SqlDependency.Start. O ouvinte cliente recebe a mensagem de invalidação. O ouvinte cliente localiza então o objeto associado SqlDependency e lança o OnChange evento.
O seguinte fragmento de código mostra o padrão de design que usaria para criar uma aplicação de exemplo.
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 reference 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);
}