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 ASP.NET Cache a konkrétní tabulkou databáze systému SQL Server nebo výsledky dotazu serveru SQL Server 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 ovládací prvky a GridView k zobrazení tabulky databáze. Po načtení stránky se stránka pokusí vytvořit SqlCacheDependency objekt. Po vytvoření objektu SqlCacheDependency stránka přidá položku do objektu Cache
se závislostí na objektu SqlCacheDependency . Měli byste použít zpracování výjimek podobné tomu, které je tady uvedené.
<%@ 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 systému SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 a SQL Server 2005) SqlCacheDependency třída monitoruje konkrétní tabulku databáze systému SQL Server. Když se tabulka změní, položky přidružené k tabulce se odeberou z objektu Cachea do objektu se přidá Cachenová verze položky.
Třída SqlCacheDependency také podporuje integraci s System.Data.SqlClient.SqlDependency třídou při použití databáze SYSTÉMU SQL Server 2005. Mechanismus oznamování dotazů systému SQL Server 2005 detekuje změny dat, které zneplatní výsledky dotazu SQL, a odebere všechny položky v mezipaměti přidružené k dotazu SQL z System.Web.Caching.Cache.
Třídu můžete použít SqlCacheDependency k přidání položek do aplikací Cache , které jsou závislé na tabulce databáze SQL Serveru nebo na dotaz SQL při použití SQL Serveru 2005. Tuto třídu můžete také použít spolu s @ OutputCache
direktivou k vytvoření stránky v mezipaměti výstupu nebo uživatelského ovládacího prvku závislého na tabulce databáze SYSTÉMU SQL Server. Nakonec můžete použít SqlCacheDependency třídu s direktivou @ OutputCache
page k vytvoření stránky v mezipaměti výstupu závislé na výsledcích dotazu SQL při použití SQL Server 2005. Oznámení dotazu pomocí SQL Serveru 2005 není podporováno v direktivě @ OutputCache
pro uživatelské ovládací prvky.
Poznámka
Aby tato třída fungovala správně při použití tabulkových oznámení, musí mít databáze a všechny tabulky, na kterých chcete vytvořit závislosti, 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 v souboru Web.config aplikace obsažena správná nastavení konfigurace.
Použití objektu SqlCacheDependency s oznámením dotazu SQL Serveru 2005 nevyžaduje žádnou explicitní konfiguraci. Informace o omezeních typů dotazů Transact-SQL, které jsou povolené při použití oznámení dotazu, najdete v dokumentaci k SQL Serveru.
Následující příklad ukazuje ASP.NET Web.config soubor, který umožňuje závislosti založené na tabulce databáze SQL Serveru.
<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
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 třídy pomocí zadaných SqlCacheDependency parametrů k vytvoření závislosti klíče mezipaměti. |
Vlastnosti
HasChanged |
Získá hodnotu označující, zda se CacheDependency objekt změnil. (Zděděno od CacheDependency) |
UtcLastModified |
Získá čas, kdy byla závislost naposledy změněna. (Zděděno od CacheDependency) |
Metody
CreateOutputCacheDependency(String) |
Vytvoří relaci závislosti mezi položkou, která je uložena v objektu aplikace ASP.NET OutputCache a tabulkou databáze SYSTÉMU SQL Server. |
DependencyDispose() |
Uvolní prostředky používané třídou a všemi třídami CacheDependency , 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čí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
FinishInit() |
Dokončí inicializaci objektu CacheDependency . (Zděděno od CacheDependency) |
GetFileDependencies() |
Získá závislosti souborů. (Zděděno od CacheDependency) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
GetUniqueID() |
Načte jedinečný identifikátor objektu SqlCacheDependency . |
ItemRemoved() |
Volá se při odebrání položky monitorované 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 Objectsouboru . (Zděděno od Object) |
NotifyDependencyChanged(Object, EventArgs) |
Upozorní základní CacheDependency objekt, že závislost reprezentovaná odvozenou CacheDependency třídou se změnila. (Zděděno od CacheDependency) |
SetCacheDependencyChanged(Action<Object,EventArgs>) |
Přidá metodu Action, která zpracuje upozornění zúčastněné strany na změny této závislosti. (Zděděno od CacheDependency) |
SetUtcLastModified(DateTime) |
Označuje č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) |