Udostępnij za pomocą


Wykonywanie poleceń SQL za pomocą polecenia SqlNotificationRequest

Można SqlCommand skonfigurować do generowania powiadomienia, gdy dane zmieniają się po pobraniu z serwera, a zestaw wyników będzie inny, jeśli zapytanie zostało wykonane ponownie. Jest to przydatne w scenariuszach, w których chcesz używać niestandardowych kolejek powiadomień na serwerze lub gdy nie chcesz obsługiwać obiektów na żywo.

Tworzenie żądania powiadomienia

Możesz użyć obiektu SqlNotificationRequest do utworzenia żądania powiadomienia, wiążąc go z obiektem SqlCommand. Po utworzeniu żądania nie potrzebujesz obiektu już SqlNotificationRequest. Można pytać o kolejkę pod kątem wszelkich powiadomień i zareagować odpowiednio. Powiadomienia mogą wystąpić nawet wtedy, gdy aplikacja zostanie zamknięta, a następnie ponownie uruchomiona.

Po wykonaniu polecenia ze skojarzonym powiadomieniem, wszelkie zmiany w oryginalnym zestawie wyników inicjują wysłanie komunikatu do kolejki SQL Server, która została skonfigurowana w żądaniu powiadomień.

Sposób sondowania kolejki programu SQL Server i interpretowania komunikatu jest specyficzny dla aplikacji. Aplikacja jest odpowiedzialna za sondowanie kolejki i reagowanie na podstawie zawartości komunikatu.

Uwaga / Notatka

W przypadku używania żądań powiadomień programu SQL Server z SqlDependency, utwórz własną nazwę kolejki zamiast używania domyślnej nazwy usługi.

Brak nowych elementów zabezpieczeń po stronie klienta dla programu SqlNotificationRequest. Jest to przede wszystkim funkcja serwera, a serwer utworzył specjalne uprawnienia, które użytkownicy muszą posiadać, aby zażądać powiadomienia.

Przykład

Poniższy fragment kodu pokazuje, jak utworzyć element SqlNotificationRequest i skojarzyć go z elementem 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.

Zobacz także