Udostępnij przez


Włączanie powiadomień o zapytaniach

Pobieranie ADO.NET

Aplikacje, które korzystają z powiadomień o zapytaniach, mają wspólny zestaw wymagań. Źródło danych musi być poprawnie skonfigurowane do obsługi powiadomień dotyczących zapytań SQL, a użytkownik musi mieć odpowiednie uprawnienia po stronie klienta i po stronie serwera.

Aby korzystać z powiadomień dotyczących zapytań, musisz:

  • Włącz powiadomienia dotyczące zapytań dla bazy danych.
  • Upewnij się, że identyfikator użytkownika używany do nawiązywania połączenia z bazą danych ma niezbędne uprawnienia.
  • SqlCommand Użyj obiektu, aby wykonać prawidłową instrukcję SELECT ze skojarzonym obiektem powiadomienia — SqlDependency albo SqlNotificationRequest.
  • Podaj kod, aby przetworzyć powiadomienie, jeśli monitorowane dane zmieniają się.

Wymagania dotyczące powiadomień dotyczących zapytań

Powiadomienia o zapytaniach są obsługiwane tylko w przypadku instrukcji SELECT, które spełniają listę określonych wymagań. Poniższa tabela zawiera linki do dokumentacji usługi Service Broker i powiadomień dotyczących zapytań w książkach programu SQL Server Online.

Dokumentacja programu SQL Server

Włączanie powiadomień o zapytaniach w celu uruchomienia przykładowego kodu

Aby włączyć usługę Service Broker w bazie danych AdventureWorks przy użyciu programu SQL Server Management Studio, wykonaj następującą instrukcję Transact-SQL:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Aby przykłady powiadomień działały poprawnie, następujące polecenia Transact-SQL muszą być wykonane na serwerze bazy danych.

CREATE QUEUE ContactChangeMessages;

CREATE SERVICE ContactChangeNotifications
  ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

Uprawnienia dotyczące powiadomień zapytań

Użytkownicy, którzy wykonują polecenia żądające powiadomienia, muszą mieć uprawnienie do bazy danych POWIADOMIEŃ ZAPYTANIA SUBSKRYPCJI na serwerze.

Kod po stronie klienta uruchamiany w trybie częściowego zaufania wymaga SqlClientPermission.

Poniższy kod tworzy obiekt SqlClientPermission, ustawiając PermissionState na Unrestricted. Wymusi Demand to SecurityException w czasie wykonywania, jeśli wszystkie osoby wywołujące wyższe w stosie wywołań nie otrzymały uprawnień.

using Microsoft.Data.SqlClient;
using System.Security.Permissions;

class Program
{
    static void Main()
    {
    }

    // Code requires directives to
    // System.Security.Permissions and
    // Microsoft.Data.SqlClient

    private bool CanRequestNotifications()
    {
        SqlClientPermission permission =
            new SqlClientPermission(
            PermissionState.Unrestricted);
        try
        {
            permission.Demand();
            return true;
        }
        catch (System.Exception)
        {
            return false;
        }
    }
}

Wybieranie obiektu powiadomienia

Interfejs API powiadomień o zapytaniach udostępnia dwa obiekty do przetwarzania powiadomień: SqlDependency i SqlNotificationRequest.

Korzystanie z programu SqlDependency

Aby można było używać SqlDependencyprogramu , należy włączyć usługę Service Broker dla używanej bazy danych programu SQL Server, a użytkownicy muszą mieć uprawnienia do odbierania powiadomień. Obiekty usługi Service Broker, takie jak kolejka powiadomień, są wstępnie zdefiniowane.

SqlDependency Ponadto automatycznie uruchamia wątek roboczy w celu przetwarzania powiadomień, gdy są umieszczane w kolejce. Analizuje również komunikat Service Broker, ujawniając informacje w postaci danych argumentu zdarzenia. SqlDependency należy zainicjować przez wywołanie Start metody w celu ustanowienia zależności z bazą danych. Start to metoda statyczna, która musi być wywoływana tylko raz podczas inicjowania aplikacji dla każdego wymaganego połączenia z bazą danych. Metodę Stop należy wywołać po zakończeniu działania aplikacji dla każdego utworzonego połączenia zależności.

Korzystanie z metody SqlNotificationRequest

Z kolei SqlNotificationRequest wymaga samodzielnego zaimplementowania całej infrastruktury nasłuchiwania. Ponadto należy zdefiniować wszystkie pomocnicze obiekty usługi Service Broker, takie jak kolejka, usługa i typy komunikatów obsługiwane przez kolejkę. Zastosowanie podejścia ręcznego jest przydatne, jeśli aplikacja wymaga specjalnych komunikatów lub zachowań dotyczących powiadomień, bądź jest częścią większej aplikacji Service Broker.

Dalsze kroki