Execução de SqlCommand com um SqlNotificationRequest
A SqlCommand pode ser configurado para gerar uma notificação quando os dados são alterados depois de terem sido buscados no servidor e o conjunto de resultados seria diferente se a consulta fosse executada novamente. Isso é útil para cenários em que você deseja usar filas de notificação personalizadas no servidor ou quando não deseja manter objetos dinâmicos.
Criando a solicitação de notificação
Você pode usar um SqlNotificationRequest objeto para criar a solicitação de notificação vinculando-a a um SqlCommand
objeto. Depois que a solicitação é criada, você não precisa mais do SqlNotificationRequest
objeto. Você pode consultar a fila para quaisquer notificações e responder adequadamente. As notificações podem ocorrer mesmo se o aplicativo for desligado e, posteriormente, reiniciado.
Quando o comando com a notificação associada é executado, quaisquer alterações no conjunto de resultados original disparam o envio de uma mensagem para a fila do SQL Server que foi configurada na solicitação de notificação.
A forma como você pesquisa a fila do SQL Server e interpreta a mensagem é específica para seu aplicativo. O aplicativo é responsável por sondar a fila e reagir com base no conteúdo da mensagem.
Nota
Ao usar solicitações de notificação do SQL Server com SqlDependencyo , crie seu próprio nome de fila em vez de usar o nome de serviço padrão.
Não há novos elementos de segurança do lado do cliente para SqlNotificationRequesto . Este é principalmente um recurso de servidor, e o servidor criou privilégios especiais que os usuários devem ter para solicitar uma notificação.
Exemplo
O fragmento de código a seguir demonstra como criar um SqlNotificationRequest e associá-lo a um SqlCommandarquivo .
' Assume connection is an open SqlConnection.
' Create a new SqlCommand object.
Dim command As New SqlCommand( _
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", connection)
' Create a SqlNotificationRequest object.
Dim notificationRequest As New SqlNotificationRequest()
notificationRequest.id = "NotificationID"
notificationRequest.Service = "mySSBQueue"
' Associate the notification request with the command.
command.Notification = notificationRequest
' Execute the command.
command.ExecuteReader()
' Process the DataReader.
' You can use Transact-SQL syntax to periodically poll the
' SQL Server queue to see if you have a new message.
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
SqlCommand command=new SqlCommand(
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", connection);
// Create a SqlNotificationRequest object.
SqlNotificationRequest notificationRequest=new SqlNotificationRequest();
notificationRequest.id="NotificationID";
notificationRequest.Service="mySSBQueue";
// Associate the notification request with the command.
command.Notification=notificationRequest;
// Execute the command.
command.ExecuteReader();
// Process the DataReader.
// You can use Transact-SQL syntax to periodically poll the
// SQL Server queue to see if you have a new message.