Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Een SqlDependency object kan worden gekoppeld aan een SqlCommand om te detecteren wanneer queryresultaten verschillen van de resultaten die oorspronkelijk zijn opgehaald. U kunt ook een gemachtigde toewijzen aan de OnChange gebeurtenis, die wordt geactiveerd wanneer de resultaten voor een bijbehorende opdracht worden gewijzigd. Koppel de SqlDependency opdracht aan de opdracht voordat u de opdracht uitvoert. De HasChanges eigenschap van de SqlDependency functie kan ook worden gebruikt om te bepalen of de queryresultaten zijn gewijzigd sinds de gegevens voor het eerst zijn opgehaald.
Beveiligingsoverwegingen
De afhankelijkheidsinfrastructuur vertrouwt op een SqlConnection die wordt geopend wanneer Start wordt aangeroepen om meldingen te ontvangen dat de onderliggende gegevens voor een bepaalde opdracht zijn gewijzigd. De mogelijkheid voor een client om de aanroep naar SqlDependency.Start te starten, wordt gecontroleerd door SqlClientPermission en beveiligingskenmerken voor codetoegang. Zie Querymeldingen inschakelen voor meer informatie.
Example
De volgende stappen laten zien hoe u een afhankelijkheid declareert, een opdracht uitvoert en een melding ontvangt wanneer de resultatenset wordt gewijzigd:
Start een
SqlDependencyverbinding met de server.Maak SqlConnection en SqlCommand objecten om verbinding te maken met de server en definieer een Transact-SQL instructie.
Maak een nieuw
SqlDependencyobject of gebruik een bestaand object en bind het aan hetSqlCommandobject. Intern maakt deze koppeling een SqlNotificationRequest object en verbindt het naar behoefte aan het opdrachtobject. Deze meldingsaanvraag bevat een interne id die ditSqlDependencyobject uniek identificeert. De clientlistener wordt ook gestart als deze nog niet actief is.Abonneer een gebeurtenis-handler op de
OnChangegebeurtenis van hetSqlDependencyobject.Voer de opdracht uit met behulp van een van de
Executemethoden van hetSqlCommandobject. Omdat de opdracht is gebonden aan het meldingsobject, herkent de server dat er een melding moet worden gegenereerd en zullen de wachtrijgegevens verwijzen naar de wachtrij met afhankelijkheden.Stop de
SqlDependencyverbinding met de server.
Als een gebruiker vervolgens de onderliggende gegevens wijzigt, detecteert Microsoft SQL Server dat er een melding in behandeling is voor een dergelijke wijziging en plaatst een melding die wordt verwerkt en doorgestuurd naar de client via de onderliggende SqlConnection gegevens die zijn gemaakt door aan te roepen SqlDependency.Start. De clientlistener ontvangt het ongeldige bericht. De clientlistener zoekt vervolgens het bijbehorende SqlDependency object op en activeert het OnChange-evenement.
In het volgende codefragment ziet u het ontwerppatroon dat u zou gebruiken om een voorbeeldtoepassing te maken.
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the reference in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange+=new
OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
// Handler method
void OnDependencyChange(object sender,
SqlNotificationEventArgs e )
{
// Handle the event (for example, invalidate this cache entry).
}
void Termination()
{
// Release the dependency.
SqlDependency.Stop(connectionString, queueName);
}