Partilhar via


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.

Consulte também