Provádění SqlCommand pomocí SqlNotificationRequest
Dá SqlCommand se nakonfigurovat tak, aby vygenerovala oznámení, když se data po načtení ze serveru změnila a sada výsledků by se v případě opětovného spuštění dotazu změnila. To je užitečné ve scénářích, kdy chcete na serveru používat vlastní fronty oznámení nebo když nechcete udržovat živé objekty.
Vytvoření žádosti o oznámení
Objekt můžete použít SqlNotificationRequest k vytvoření požadavku na oznámení tím, že ho provážete s objektem SqlCommand
. Po vytvoření požadavku už objekt nepotřebujete SqlNotificationRequest
. Frontu můžete dotazovat na všechna oznámení a odpovídajícím způsobem reagovat. K oznámením může dojít i v případě, že je aplikace vypnutá a následně se restartuje.
Při spuštění příkazu s přidruženým oznámením se všechny změny původní aktivační události sady výsledků odesílají zprávu do fronty SQL Serveru, která byla nakonfigurována v žádosti o oznámení.
Jak dotazujete frontu SQL Serveru a interpretujete zprávu specifickou pro vaši aplikaci. Aplikace zodpovídá za dotazování fronty a reakce na základě obsahu zprávy.
Poznámka:
Pokud používáte požadavky na oznámení SQL Serveru, SqlDependencyvytvořte místo výchozího názvu služby vlastní název fronty.
Neexistují žádné nové prvky zabezpečení na straně klienta pro SqlNotificationRequest. Jedná se především o funkci serveru a server vytvořil speciální oprávnění, která uživatelé musí požádat o oznámení.
Příklad
Následující fragment kódu ukazuje, jak vytvořit SqlNotificationRequest a přidružit ho k .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.