SqlCacheDependency Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vytvoří relaci mezi položkou uloženou v objektu aplikace Cache ASP.NET a konkrétní tabulkou databáze SQL Serveru nebo výsledky dotazu SQL Serveru 2005. Tato třída se nemůže dědit.
public ref class SqlCacheDependency sealed : System::Web::Caching::CacheDependency
public sealed class SqlCacheDependency : System.Web.Caching.CacheDependency
type SqlCacheDependency = class
inherit CacheDependency
Public NotInheritable Class SqlCacheDependency
Inherits CacheDependency
- Dědičnost
Příklady
Následující příklad kódu používá SqlDataSource a GridView ovládací prvky k zobrazení databázové tabulky. Při načtení stránky se stránka pokusí vytvořit SqlCacheDependency objekt. Po vytvoření objektu SqlCacheDependency stránka přidá položku do Cache objektu s závislostí na objektu SqlCacheDependency . Měli byste použít zpracování výjimek podobné tomu, co vidíte tady.
<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// <snippet2>
public void Page_Load(object Src, EventArgs E)
{
// Declare the SqlCacheDependency instance, SqlDep.
SqlCacheDependency SqlDep = null;
// Check the Cache for the SqlSource key.
// If it isn't there, create it with a dependency
// on a SQL Server table using the SqlCacheDependency class.
if (Cache["SqlSource"] == null) {
// Because of possible exceptions thrown when this
// code runs, use Try...Catch...Finally syntax.
try {
// Instantiate SqlDep using the SqlCacheDependency constructor.
SqlDep = new SqlCacheDependency("Northwind", "Categories");
}
// Handle the DatabaseNotEnabledForNotificationException with
// a call to the SqlCacheDependencyAdmin.EnableNotifications method.
catch (DatabaseNotEnabledForNotificationException exDBDis) {
try {
SqlCacheDependencyAdmin.EnableNotifications("Northwind");
}
// If the database does not have permissions set for creating tables,
// the UnauthorizedAccessException is thrown. Handle it by redirecting
// to an error page.
catch (UnauthorizedAccessException exPerm) {
Response.Redirect(".\\ErrorPage.htm");
}
}
// Handle the TableNotEnabledForNotificationException with
// a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method.
catch (TableNotEnabledForNotificationException exTabDis) {
try {
SqlCacheDependencyAdmin.EnableTableForNotifications("Northwind", "Categories");
}
// If a SqlException is thrown, redirect to an error page.
catch (SqlException exc) {
Response.Redirect(".\\ErrorPage.htm");
}
}
// If all the other code is successful, add MySource to the Cache
// with a dependency on SqlDep. If the Categories table changes,
// MySource will be removed from the Cache. Then generate a message
// that the data is newly created and added to the cache.
finally {
Cache.Insert("SqlSource", Source1, SqlDep);
CacheMsg.Text = "The data object was created explicitly.";
}
}
else {
CacheMsg.Text = "The data was retrieved from the Cache.";
}
}
// </snippet2>
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<p>
</p>
<p>
<asp:SqlDataSource id="Source1" runat="server" SelectCommand="SELECT * FROM [Categories]" UpdateCommand="UPDATE [Categories] SET [CategoryName]=@CategoryName,[Description]=@Description,[Picture]=@Picture WHERE [CategoryID]=@CategoryID" ConnectionString="<%$ ConnectionStrings:Northwind %>"></asp:SqlDataSource>
<asp:GridView id="GridView1" runat="server" DataKeyNames="CategoryID" AllowSorting="True" AllowPaging="True" DataSourceID="Source1"></asp:GridView>
</p>
<p>
</p>
<p>
<asp:Label id="CacheMsg" runat="server" AssociatedControlID="GridView1"></asp:Label>
</p>
</form>
</body>
</html>
<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' <snippet2>
Sub Page_Load(Src As Object, E As EventArgs)
' Declare the SqlCacheDependency instance, SqlDep.
Dim SqlDep As SqlCacheDependency
' Check the Cache for the SqlSource key.
' If it isn't there, create it with a dependency
' on a SQL Server table using the SqlCacheDependency class.
If Cache("SqlSource") Is Nothing
' Because of possible exceptions thrown when this
' code runs, use Try...Catch...Finally syntax.
Try
' Instantiate SqlDep using the SqlCacheDependency constructor.
SqlDep = New SqlCacheDependency("Northwind", "Categories")
' Handle the DatabaseNotEnabledForNotificationException with
' a call to the SqlCacheDependencyAdmin.EnableNotifications method.
Catch exDBDis As DatabaseNotEnabledForNotificationException
Try
SqlCacheDependencyAdmin.EnableNotifications("Northwind")
' If the database does not have permissions set for creating tables,
' the UnauthorizedAccessException is thrown. Handle it by redirecting
' to an error page.
Catch exPerm As UnauthorizedAccessException
Response.Redirect(".\ErrorPage.htm")
End Try
' Handle the TableNotEnabledForNotificationException with
' a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method.
Catch exTabDis As TableNotEnabledForNotificationException
Try
SqlCacheDependencyAdmin.EnableTableForNotifications( _
"Northwind", "Categories")
' If a SqlException is thrown, redirect to an error page.
Catch exc As SqlException
Response.Redirect(".\ErrorPage.htm")
End Try
' If all the other code is successful, add MySource to the Cache
' with a dependency on SqlDep. If the Categories table changes,
' MySource will be removed from the Cache. Then generate a message
' that the data is newly created and added to the cache.
Finally
Cache.Insert("SqlSource", Source1, SqlDep)
CacheMsg.Text = "The data object was created explicitly."
End Try
Else
CacheMsg.Text = "The data was retrieved from the Cache."
End If
End Sub
' </snippet2>
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<p>
</p>
<p>
<asp:SqlDataSource id="Source1" runat="server" SelectCommand="SELECT * FROM [Categories]" UpdateCommand="UPDATE [Categories] SET [CategoryName]=@CategoryName,[Description]=@Description,[Picture]=@Picture WHERE [CategoryID]=@CategoryID" ConnectionString="<%$ ConnectionStrings:Northwind %>"></asp:SqlDataSource>
<asp:GridView id="GridView1" runat="server" DataKeyNames="CategoryID" AllowSorting="True" AllowPaging="True" DataSourceID="Source1"></asp:GridView>
</p>
<p>
</p>
<p>
<asp:Label id="CacheMsg" runat="server" AssociatedControlID="GridView1"></asp:Label>
</p>
</form>
</body>
</html>
Poznámky
Ve všech podporovaných verzích SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 a SQL Server 2005) třída SqlCacheDependency monitoruje konkrétní tabulku databáze SQL Server. Když se tabulka změní, položky přidružené k tabulce se odeberou z Cachetabulky a do ní se přidá Cachenová verze položky .
Třída SqlCacheDependency podporuje také integraci s třídou System.Data.SqlClient.SqlDependency při použití databáze SQL Server 2005. Mechanismus oznámení dotazu SQL Server 2005 detekuje změny dat, která zneplatní výsledky dotazu SQL, a odebere všechny položky uložené v mezipaměti přidružené k dotazu SQL z System.Web.Caching.Cache.
Třídu SqlCacheDependency můžete použít k přidání položek do Cache aplikace, které jsou závislé na tabulce databáze SQL Server nebo v dotazu SQL při použití SQL Server 2005. Tuto třídu můžete použít také s direktivou @ OutputCache k vytvoření stránky uložené v mezipaměti výstupu nebo uživatelského ovládacího prvku závislého na tabulce databáze SQL Server. Nakonec můžete použít třídu SqlCacheDependency s direktivou stránky @ OutputCache k vytvoření stránky uložené v mezipaměti výstupu závislého na výsledcích dotazu SQL při použití SQL Server 2005. V direktivě @ OutputCache pro uživatelské ovládací prvky se nepodporuje dotazování pomocí SQL Server 2005.
Note
Aby tato třída fungovala správně při používání oznámení založených na tabulkách, musí mít databáze a všechny tabulky, na kterých chcete závislosti provádět, povolená oznámení. Oznámení můžete povolit voláním metod SqlCacheDependencyAdmin třídy nebo pomocí nástroje příkazového aspnet_regsql.exe řádku. Kromě toho musí být do souboru aplikace Web.config zahrnuta správná nastavení konfigurace.
Použití objektu SqlCacheDependency s oznámením dotazu SQL Server 2005 nevyžaduje explicitní konfiguraci. Informace o omezeních typů Transact-SQL dotazů, které jsou povoleny při použití oznámení dotazu, najdete v dokumentaci SQL Server.
Následující příklad ukazuje soubor ASP.NET Web.config, který umožňuje závislosti založené na tabulce na SQL Server databázové tabulce.
<configuration>
<connectionStrings>
<add name="Northwind" connectionString="Data Source=(local); Initial Catalog=northwind; Integrated Security=true"; providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled = "true" pollTime = "60000" >
<databases>
<add name="northwind"
connectionStringName="Northwind"
pollTime="9000000"
/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration>
Konstruktory
| Name | Description |
|---|---|
| SqlCacheDependency(SqlCommand) |
Inicializuje novou instanci SqlCacheDependency třídy pomocí zadané SqlCommand k vytvoření závislosti klíče mezipaměti. |
| SqlCacheDependency(String, String) |
Inicializuje novou instanci SqlCacheDependency třídy pomocí zadaných parametrů k vytvoření závislosti klíče mezipaměti. |
Vlastnosti
| Name | Description |
|---|---|
| HasChanged |
Získá hodnotu určující, zda CacheDependency objekt byl změněn. (Zděděno od CacheDependency) |
| UtcLastModified |
Získá čas poslední změny závislosti. (Zděděno od CacheDependency) |
Metody
| Name | Description |
|---|---|
| CreateOutputCacheDependency(String) |
Vytvoří relaci závislostí mezi položkou uloženou v objektu OutputCache aplikace ASP.NET a tabulkou databáze SQL Server. |
| DependencyDispose() |
Uvolní prostředky používané CacheDependency třídou a všechny třídy, které jsou odvozeny z CacheDependency. (Zděděno od CacheDependency) |
| Dispose() |
Uvolní prostředky používané objektem CacheDependency . (Zděděno od CacheDependency) |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| FinishInit() |
Dokončí inicializaci objektu CacheDependency . (Zděděno od CacheDependency) |
| GetFileDependencies() |
Získá závislosti souboru. (Zděděno od CacheDependency) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| GetUniqueID() |
Načte jedinečný identifikátor objektu SqlCacheDependency . |
| ItemRemoved() |
Volá se při odebrání monitorované položky mezipaměti. (Zděděno od CacheDependency) |
| KeepDependenciesAlive() |
Aktualizuje čas posledního přístupu každé položky mezipaměti, která závisí na této položce. (Zděděno od CacheDependency) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| NotifyDependencyChanged(Object, EventArgs) |
Upozorní základní CacheDependency objekt, že se změnila závislost reprezentovaná odvozenou CacheDependency třídou. (Zděděno od CacheDependency) |
| SetCacheDependencyChanged(Action<Object,EventArgs>) |
Přidá metodu akce pro zpracování upozornění zúčastněné strany na změny této závislosti. (Zděděno od CacheDependency) |
| SetUtcLastModified(DateTime) |
Označí čas poslední změny závislosti. (Zděděno od CacheDependency) |
| TakeOwnership() |
Umožňuje prvnímu uživateli deklarovat výhradní vlastnictví této závislosti. (Zděděno od CacheDependency) |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |