Выполнение 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.