Wykonywanie polecenia SqlCommand za pomocą 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
Obiekt umożliwia SqlNotificationRequest utworzenie żądania powiadomienia przez powiązanie go z obiektem SqlCommand
. Po utworzeniu żądania nie potrzebujesz SqlNotificationRequest
już obiektu. Kolejkę można wysłać do kolejki pod kątem wszelkich powiadomień i odpowiednio odpowiedzieć. 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 wyzwalaczu zestawu wyników wysyłają komunikat do kolejki programu SQL Server skonfigurowanej 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
W przypadku używania żądań powiadomień programu SQL Server z SqlDependencyprogramem utwórz własną nazwę kolejki zamiast używać 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ą 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.