Idioma

Execução de SqlCommand com um SqlNotificationRequest

Para receber uma notificação quando os resultados da consulta forem alterados, configure o SqlCommand com uma solicitação de notificação. Use solicitações de notificação para filas de servidor personalizadas ou quando não quiser manter objetos de dependência ativos.

Criando a solicitação de notificação

Crie o objeto SqlNotificationRequest e atribua-o à propriedade Notification do comando antes da execução. Depois que o servidor registrar a solicitação, você não precisará reter o objeto de solicitação. Consulte a fila em busca de notificações e responda conforme o aplicativo requer. As notificações podem chegar enquanto o aplicativo estiver desligado e permanecer disponíveis após a reinicialização.

Quando o comando é executado com a notificação associada, qualquer alteração no conjunto de resultados original dispara o envio de uma mensagem para a fila do SQL Server configurada na solicitação de notificação.

A forma de sondar a fila do SQL Server e interpretar a mensagem é específica para seu aplicativo. O aplicativo é responsável pela sondagem da fila e por reagir com base no conteúdo da mensagem.

Observação

Ao usar as solicitações de notificação do SQL Server com SqlDependency, crie um nome de fila próprio em vez de usar o nome de serviço padrão.

Conceda aos usuários as permissões de servidor necessárias para solicitar notificações. A SqlNotificationRequest classe não adiciona requisitos de segurança do lado do cliente.

Exemplo

O fragmento a seguir cria o SqlNotificationRequest objeto e o associa ao SqlCommand. Instale o pacote NuGet Microsoft.Data.SqlClient e importe Microsoft.Data.SqlClient e Microsoft.Data.Sql. O Options valor nomeia um serviço do Service Broker e o banco de dados que o hospeda, não a fila em si. Crie o serviço e a fila, conforme descrito na habilitação de notificações de consulta.

' 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.UserData = "NotificationID"
notificationRequest.Options = "service=ContactChangeNotifications;local database=AdventureWorks"

' 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.UserData = "NotificationID";
notificationRequest.Options = "service=ContactChangeNotifications;local database=AdventureWorks";

// 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.

Consulte também