Hizkuntza

Ejecución de SqlCommand con sqlNotificationRequest

Para recibir una notificación cuando cambien los resultados de la consulta, configure SqlCommand con una solicitud de notificación. Utilice solicitudes de notificación para colas de servidor personalizadas o cuando no desee mantener objetos de dependencia activos.

Creación de la solicitud de notificación

Cree el objeto SqlNotificationRequest y asígnelo a la propiedad Notification del comando antes de la ejecución. Después de que el servidor registre la solicitud, no es necesario conservar el objeto de solicitud. Interrogue la cola de notificaciones y responda según lo requiera la aplicación. Las notificaciones pueden llegar mientras la aplicación está cerrada y permanecen disponibles después de reiniciarse.

Cuando se ejecuta el comando con la notificación asociada, los cambios en el conjunto de resultados original desencadenan el envío de un mensaje a la cola de SQL Server configurada en la solicitud de notificación.

El modo en el que se sondea la cola de SQL Server y se interpreta el mensaje es específico de la aplicación. La aplicación es responsable de sondear la cola y de reaccionar según el contenido del mensaje.

Nota:

Al usar solicitudes de notificación de SQL Server con SqlDependency, cree su propio nombre de cola en lugar de usar el nombre de servicio predeterminado.

Conceda a los usuarios los permisos de servidor necesarios para solicitar notificaciones. La SqlNotificationRequest clase no agrega requisitos de seguridad del lado cliente.

Ejemplo

El fragmento siguiente crea el objeto SqlNotificationRequest y lo asocia al SqlCommand. Instale el paquete NuGet Microsoft.Data.SqlClient e importe Microsoft.Data.Sql y Microsoft.Data.SqlClient. El Options valor denomina un servicio de Service Broker y la base de datos que lo hospeda, no la propia cola. Cree el servicio y la cola como se describe en Habilitación de notificaciones de consulta.

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

Consulte también