Esecuzione di SqlCommand con SqlNotificationRequest (ADO.NET)
È possibile configurare SqlCommand per generare una notifica quando i dati vengono modificati dopo essere stati recuperati dal server, nel qual caso il set di risultati sarebbe diverso se venisse eseguita nuovamente la query. Questa funzione risulta utile per le situazioni in cui si desidera utilizzare code di notifiche personalizzate sul server o quando non si desidera mantenere oggetti attivi.
Creazione della richiesta di notifica
È possibile utilizzare un oggetto SqlNotificationRequest per creare la richiesta di notifica associandolo a un oggetto SqlCommand. Una volta creata la richiesta, l'oggetto SqlNotificationRequest non è più necessario. È possibile eseguire una query sulla coda per rilevare eventuali notifiche e rispondere nel modo appropriato. Le notifiche possono essere generate anche se l'applicazione viene arrestata e successivamente riavviata.
Quando viene eseguito il comando con la notifica associata, le eventuali modifiche apportate al set di risultati originale attivano l'invio di un messaggio alla coda di SQL Server configurata nella richiesta di notifica.
Il polling della coda di SQL Server e l'interpretazione del messaggio sono specifici dell'applicazione. Il polling della coda e la reazione in base al contenuto del messaggio dipendono interamente dall'applicazione.
Nota |
---|
Quando si utilizzano le richieste di notifica di SQL Server con SqlDependency, creare un nome per la coda anziché utilizzare il nome del servizio predefinito. |
Non esistono nuovi elementi di sicurezza sul lato client per SqlNotificationRequest. Si tratta principalmente di una funzionalità del server, che ha creato privilegi speciali di cui gli utenti devono disporre per richiedere una notifica.
Esempio
Nel frammento di codice seguente viene illustrato come creare un oggetto SqlNotificationRequest e associarlo 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 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.