Ejecución de SqlCommand Execution con SqlNotificationRequestSqlCommand Execution with a SqlNotificationRequest

Los objetos SqlCommand se pueden configurar para generar una notificación si, después de capturar datos del servidor, éstos generasen un conjunto de resultados diferente en caso de que se ejecutase de nuevo la consulta.A SqlCommand can be configured to generate a notification when data changes after it has been fetched from the server and the result set would be different if the query were executed again. Esto resulta útil si desea usar colas de notificaciones personalizadas en el servidor o si no desea mantener objetos activos.This is useful for scenarios where you want to use custom notification queues on the server or when you do not want to maintain live objects.

Crear la solicitud de notificaciónCreating the Notification Request

Puede utilizar un objeto SqlNotificationRequest para crear la solicitud de notificación mediante su enlace a un objeto SqlCommand.You can use a SqlNotificationRequest object to create the notification request by binding it to a SqlCommand object. Después de crear la solicitud, ya no necesitará el objeto SqlNotificationRequest.Once the request is created, you no longer need the SqlNotificationRequest object. Puede consultar las notificaciones en la cola y responder de forma adecuada.You can query the queue for any notifications and respond appropriately. Las notificaciones se pueden producir incluso si la aplicación se apaga y posteriormente se reinicia.Notifications can occur even if the application is shut down and subsequently restarted.

Cuando se ejecuta el comando con las notificaciones asociadas, 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.When the command with the associated notification is executed, any changes to the original result set trigger sending a message to the SQL Server queue that was configured in the notification request.

El modo en que se sondea la cola de SQL Server y se interpreta el mensaje es específico de la aplicación.How you poll the SQL Server queue and interpret the message is specific to your application. La aplicación es responsable de sondear la cola y de reaccionar según el contenido del mensaje.The application is responsible for polling the queue and reacting based on the contents of the message.

Nota

Si utiliza solicitudes de notificación de SQL Server con SqlDependency, cree su propio nombre de cola en lugar de usar el nombre del servicio predeterminado.When using SQL Server notification requests with SqlDependency, create your own queue name instead of using the default service name.

No existe ningún elemento de seguridad de cliente nuevo para SqlNotificationRequest.There are no new client-side security elements for SqlNotificationRequest. Se trata principalmente de una característica de servidor, que ha creado privilegios especiales que deben poseer los usuarios para solicitar una notificación.This is primarily a server feature, and the server has created special privileges that users must have to request a notification.

EjemploExample

El siguiente fragmento de código demuestra cómo crear un objeto SqlNotificationRequest y asociarlo a SqlCommand.The following code fragment demonstrates how to create a SqlNotificationRequest and associate it with a 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 notifcationRequest 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.

Vea tambiénSee also