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


Выполнение SqlCommand с помощью SqlNotificationRequest

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

См. также