Jazyk

Provádění SqlCommand s SqlNotificationRequest

Pokud chcete dostávat oznámení při změně výsledků dotazu, nakonfigurujte SqlCommand pomocí žádosti o oznámení. Požadavky na oznámení použijte pro vlastní serverové fronty nebo pokud nechcete udržovat aktivní objekty závislostí.

Vytvoření žádosti o oznámení

Vytvořte objekt a před spuštěním ho přiřaďte k vlastnosti Notification příkazu. Jakmile server požadavek zaregistruje, nemusíte uchovávat objekt požadavku. Dotazujte se fronty na oznámení a odpovězte podle toho, jak vaše aplikace vyžaduje. Oznámení můžou dorazit, když je aplikace ukončená, a po restartu aplikace jsou stále dostupná.

Po provedení příkazu s přidruženým oznámením jakékoli změny původní sady výsledků spouští odeslání zprávy do fronty SQL Serveru konfigurované v žádosti o oznámení.

Jak dotazujete frontu SQL Serveru a interpretujete zprávu, je specifické pro vaši aplikaci. Aplikace je zodpovědná za průběžnou kontrolu fronty a reagování na obsah zprávy.

Poznámka:

Pokud používáte požadavky na oznámení SQL Serveru s SqlDependency, vytvořte místo výchozího názvu služby vlastní název fronty.

Udělte uživatelům oprávnění serveru potřebná k vyžádání oznámení. Třída SqlNotificationRequest nepřidává požadavky na zabezpečení na straně klienta.

Příklad

Následující fragment vytvoří SqlNotificationRequest objekt a přidruží ho k objektu SqlCommand. Nainstalujte balíček NuGet Microsoft.Data.SqlClient a importujte Microsoft.Data.Sql a Microsoft.Data.SqlClient. Hodnota Options označuje službu Service Broker a databázi, která ji hostuje, nikoli samotnou frontu. Vytvořte službu a frontu, jak je popsáno v tématu Povolení oznámení dotazů.

' 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.UserData = "NotificationID"
notificationRequest.Options = "service=ContactChangeNotifications;local database=AdventureWorks"

' 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.UserData = "NotificationID";
notificationRequest.Options = "service=ContactChangeNotifications;local database=AdventureWorks";

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

Viz také