Exécution de SqlCommand avec une SqlNotificationRequest
Une SqlCommand peut être configurée pour générer une notification lorsque les données sont modifiées après avoir été extraites du serveur et que le jeu de résultats serait différent si la requête était exécutée à nouveau. Cela est utile dans les scénarios où vous souhaitez utiliser des files d’attente de notification personnalisées sur le serveur ou lorsque vous ne souhaitez pas conserver d’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 requête créée, vous n’avez plus besoin de l’objet SqlNotificationRequest
. Vous pouvez interroger la file d’attente pour toutes les notifications et y répondre de manière appropriée. Des notifications peuvent se produire même si l’application est arrêtée et redémarrée par la suite.
Quand la commande avec la notification associée est exécutée, toute modification du jeu de résultats 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 propre à votre application. L’application est responsable de l’interrogation de la file d’attente et de la réaction en fonction du contenu du message.
Notes
Lors de l’utilisation des requêtes 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’existe aucun nouvel élément de sécurité côté client pour SqlNotificationRequest. Il s’agit principalement d’une fonctionnalité serveur, et le serveur a créé des privilèges spéciaux que les utilisateurs doivent posséder pour demander une notification.
Exemple
Le fragment de code suivant montre comment créer une SqlNotificationRequest et l’associer à une 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.