Exécution de SqlCommand avec un SqlNotificationRequest (ADO.NET)
Un SqlCommand peut être configuré pour générer une notification lors de la modification de données, une fois qu'il a été extrait à partir du serveur et que le jeu de résultats est différent en cas de nouvelle exécution de la requête. Cette fonction est utile dans les scénarios où vous voulez utiliser des files d'attente de notification personnalisées sur le serveur ou lorsque vous ne souhaitez pas conserver des objets actifs.
Création de la demande de notification
Vous pouvez utiliser un objet SqlNotificationRequest pour créer la demande de notification en le liant à un objet SqlCommand. Une fois la demande créée, vous n'avez plus besoin de l'objet SqlNotificationRequest. Vous pouvez interroger la file d'attente pour toute notification et réagir de façon appropriée. Des notifications peuvent survenir même si l'application est arrêtée, puis redémarrée.
Lorsque la commande avec la notification associée est exécutée, toute modification du jeu de résultats d'origine déclenche l'envoi d'un message à la file d'attente SQL Server qui a été configurée dans la demande de notification.
La manière dont vous interrogez la file d'attente SQL Server et interprétez le message est spécifique à votre application. L'application est chargée d'interroger la file d'attente et de réagir en fonction du contenu du message.
Remarque |
---|
Lors de l'utilisation de demandes de notification SQL Server avec SqlDependency, créez votre propre nom de file d'attente au lieu d'utiliser le nom de service par défaut. |
Il n'y a pas de nouveaux éléments de sécurité côté client pour SqlNotificationRequest. Il s'agit principalement d'une fonctionnalité du serveur et le serveur a créé des privilèges spéciaux dont les utilisateurs doivent disposer pour demander une notification.
Exemple
Le fragment de code ci-dessous montre comment créer un SqlNotificationRequest et l'associer à un 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 notficationRequest As New SqlNotificationRequest()
notficationRequest.id = "NotificationID"
notficationRequest.Service = "mySSBQueue"
' Associate the notification request with the command.
command.Notification = notficationRequest
' 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 notficationRequest=new SqlNotificationRequest();
notficationRequest.id="NotificationID";
notficationRequest.Service="mySSBQueue";
// Associate the notification request with the command.
command.Notification=notficationRequest;
// 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.