Поделиться через


Выполнение SqlCommand с помощью SqlNotificationRequest (ADO.NET)

Объект SqlCommand можно настроить таким образом, чтобы при изменении выбранных с сервера данных создавалось уведомление, когда результирующий набор повторного запроса будет отличаться от результирующего набора первого запроса. Это полезно в сценариях, в которых нужно создать пользовательские очереди уведомлений или не требуется поддерживать активные объекты.

Создание уведомления о запросах

Объект SqlNotificationRequest можно использовать для создания уведомления о запросах, привязав его к объекту SqlCommand. После создания запроса объект SqlNotificationRequest больше не требуется. Очередь можно запрашивать на наличие уведомлений и реагировать соответствующим образом. Уведомления создаются, даже если приложение закрывается и запускается повторно.

Если выполняется команда со связанным уведомлением, любые изменения в исходном результирующем наборе приводят к отправке сообщения в очередь SQL Server, указанной в запросе уведомления.

Опрос очереди SQL Server и интерпретация сообщения зависят от конкретного приложения. За опрос очереди и реакцию, основанную на содержимом сообщения, отвечает приложение.

ПримечаниеПримечание

При использовании уведомления о запросах SQL Server вместе с объектом SqlDependency присвойте очереди собственное имя, а не используйте имя службы по умолчанию.

Для SqlNotificationRequest не существует новых клиентских элементов безопасности. Это в основном функция сервера, который создает специальные права доступа, необходимые пользователю для запроса уведомления.

Пример

В приведенном ниже фрагменте кода демонстрируется создание объекта SqlNotificationRequest и его связь с объектом SqlCommand.

' 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 notficationRequest As New SqlNotificationRequest()
notficationRequest.id = "NotificationID"
notficationRequest.Service = "mySSBQueue"

' Associate the notification request with the command.
command.Notification = notficationRequest
' 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 notficationRequest=new SqlNotificationRequest();
notficationRequest.id="NotificationID";
notficationRequest.Service="mySSBQueue";

// Associate the notification request with the command.
command.Notification=notficationRequest;
// 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.

См. также

Другие ресурсы

Уведомление о запросах в SQL Server (ADO.NET)