Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um SqlDependency objeto pode ser associado a um SqlCommand para detetar quando os resultados da consulta diferem daqueles originalmente recuperados. Você também pode atribuir um delegado ao evento OnChange, que será acionado quando os resultados forem alterados para o comando associado. Você deve associar o SqlDependency com o comando antes de executar o comando. A propriedade de SqlDependency também pode ser usada para determinar se os resultados da consulta HasChanges foram alterados desde que os dados foram recuperados pela primeira vez.
Considerações de Segurança
A infraestrutura de dependência depende de um SqlConnection que é aberto quando Start é chamado para receber notificações de que os dados subjacentes foram alterados para um determinado comando. A capacidade de um cliente iniciar a chamada para SqlDependency.Start é controlada através do uso de SqlClientPermission e dos atributos de segurança de acesso ao código. Para obter mais informações, consulte Notificações de Consulta e Segurança de Acesso ao Código e ADO.NET.
Exemplo
As etapas a seguir ilustram como declarar uma dependência, executar um comando e receber uma notificação quando o conjunto de resultados for alterado:
Inicie uma
SqlDependencyconexão com o servidor.Crie SqlConnection e SqlCommand objetos para se conectar ao servidor e definir uma instrução Transact-SQL.
Crie um novo
SqlDependencyobjeto ou use um existente e associe-oSqlCommandao objeto. Internamente, isso cria um SqlNotificationRequest objeto e o vincula ao objeto de comando conforme necessário. Esta solicitação de notificação contém um identificador interno que identifica exclusivamente esseSqlDependencyobjeto. Ele também inicia o ouvinte do cliente se ele ainda não estiver ativo.Assine um manipulador de eventos ao evento
OnChangedo objetoSqlDependency.Execute o comando usando qualquer um dos
Executemétodos doSqlCommandobjeto. Como o comando está vinculado ao objeto de notificação, o servidor reconhece que ele deve gerar uma notificação e as informações da fila apontarão para a fila de dependências.Pare a
SqlDependencyconexão com o servidor.
Se algum usuário alterar posteriormente os dados subjacentes, o Microsoft SQL Server detetará que há uma notificação pendente para tal alteração e publicará uma notificação que é processada e encaminhada para o cliente por meio do subjacente SqlConnection que foi criado chamando SqlDependency.Start. O ouvinte do cliente recebe a mensagem de invalidação. Em seguida, o ouvinte do cliente localiza o objeto associado SqlDependency e dispara o OnChange evento.
O fragmento de código a seguir mostra o padrão de design que você usaria para criar um aplicativo de exemplo.
Sub Initialization()
' Create a dependency connection.
SqlDependency.Start(connectionString, queueName)
End Sub
Sub SomeMethod()
' Assume connection is an open SqlConnection.
' Create a new SqlCommand object.
Using command As New SqlCommand( _
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", _
connection)
' Create a dependency and associate it with the SqlCommand.
Dim dependency As New SqlDependency(command)
' Maintain the reference in a class member.
' Subscribe to the SqlDependency event.
AddHandler dependency.OnChange, AddressOf OnDependencyChange
' Execute the command.
Using reader = command.ExecuteReader()
' Process the DataReader.
End Using
End Using
End Sub
' Handler method
Sub OnDependencyChange(ByVal sender As Object, _
ByVal e As SqlNotificationEventArgs)
' Handle the event (for example, invalidate this cache entry).
End Sub
Sub Termination()
' Release the dependency
SqlDependency.Stop(connectionString, queueName)
End Sub
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);
}