Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Objekt SqlDependency lze přidružit k objektu SqlCommand , aby bylo možné zjistit, kdy se výsledky dotazu liší od původně načtených. Delegáta můžete také přiřadit k OnChange události, která se aktivuje, když se výsledky pro přidružený příkaz změní. Před spuštěním příkazu je nutné ho přidružit SqlDependency k příkazu.
HasChanges Vlastnost objektu SqlDependency lze také použít k určení, jestli se výsledky dotazu od prvního načtení dat změnily.
Aspekty zabezpečení
Infrastruktura závislostí spoléhá na SqlConnection, který se otevře, když je volán Start, aby přijímal oznámení o změně podkladových dat pro daný příkaz. Možnost klienta zahájit volání na SqlDependency.Start je řízena pomocí atributů SqlClientPermission a zabezpečení přístupu kódu. Další informace najdete v tématu Povolení oznámení dotazů a zabezpečení přístupu kódu a ADO.NET.
Příklad
Následující kroky ukazují, jak deklarovat závislost, spustit příkaz a přijmout oznámení při změně sady výsledků:
SqlDependencyZahajte připojení k serveru.Vytvořte SqlConnection a SqlCommand objekty pro připojení k serveru a definujte příkaz Jazyka Transact-SQL.
Vytvořte nový
SqlDependencyobjekt nebo použijte existující objekt a vytvořte vazbu s objektemSqlCommand. Interně se vytvoří SqlNotificationRequest objekt a podle potřeby ho sváže s příkazovým objektem. Tato žádost o oznámení obsahuje interní identifikátor, který jednoznačně identifikuje tentoSqlDependencyobjekt. Spustí se také posluchač klienta, pokud ještě není aktivní.Přiřaďte obslužnou rutinu k události
OnChangeobjektuSqlDependency.Spusťte příkaz pomocí některé z
Executemetod objektuSqlCommand. Vzhledem k tomu, že příkaz je přiřazen k objektu oznámení, server rozpozná, že musí vygenerovat oznámení a informace o frontě budou odkazovat na frontu úloh závislostí.SqlDependencyZastavte připojení k serveru.
Pokud některý uživatel následně změní podkladová data, Microsoft SQL Server zjistí, že na takovou změnu čeká oznámení, a odešle oznámení, které je zpracováno a předáno klientovi prostřednictvím podkladu SqlConnection vytvořeného voláním SqlDependency.Start. Klient naslouchací proces obdrží zprávu o zneplatnění. Klientský naslouchací proces pak vyhledá přidružený SqlDependency objekt a aktivuje OnChange událost.
Následující fragment kódu ukazuje vzor návrhu, který byste použili k vytvoření ukázkové aplikace.
Sub Initialization()
' Create a dependency connection.
SqlDependency.Start(connectionString, queueName)
End Sub
Sub SomeMethod()
' Assume connection is an open SqlConnection.
' Create a new SqlCommand object.
Using command As New SqlCommand( _
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", _
connection)
' Create a dependency and associate it with the SqlCommand.
Dim dependency As New SqlDependency(command)
' Maintain the reference in a class member.
' Subscribe to the SqlDependency event.
AddHandler dependency.OnChange, AddressOf OnDependencyChange
' Execute the command.
Using reader = command.ExecuteReader()
' Process the DataReader.
End Using
End Using
End Sub
' Handler method
Sub OnDependencyChange(ByVal sender As Object, _
ByVal e As SqlNotificationEventArgs)
' Handle the event (for example, invalidate this cache entry).
End Sub
Sub Termination()
' Release the dependency
SqlDependency.Stop(connectionString, queueName)
End Sub
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);
}