SqlCacheDependency Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Richtet eine Beziehung zwischen einem Element ein, das in einem ASP.NET-Anwendungsobjekt Cache gespeichert ist, und entweder einer bestimmten SQL Server-Datenbanktabelle oder den Ergebnissen einer SQL Server 2005-Abfrage. Diese Klasse kann nicht vererbt werden.
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
- Vererbung
Beispiele
Im folgenden Codebeispiel werden die SqlDataSource Und-Steuerelemente GridView verwendet, um eine Datenbanktabelle anzuzeigen. Wenn die Seite geladen wird, versucht die Seite, ein SqlCacheDependency Objekt zu erstellen. Nachdem das SqlCacheDependency Objekt erstellt wurde, fügt die Seite dem Cache Objekt ein Element mit einer Abhängigkeit vom SqlCacheDependency Objekt hinzu. Sie sollten die Ausnahmebehandlung ähnlich wie hier gezeigt verwenden.
<%@ 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>
Hinweise
In allen unterstützten Versionen von SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 und SQL Server 2005) überwacht die SqlCacheDependency-Klasse eine bestimmte SQL Server Datenbanktabelle. Wenn sich die Tabelle ändert, werden elemente, die der Tabelle zugeordnet sind, aus dem CacheEntfernt, und eine neue Version des Elements wird der CacheHinzugefügt.
Die SqlCacheDependency-Klasse unterstützt auch die Integration in die klasse System.Data.SqlClient.SqlDependency bei Verwendung einer SQL Server 2005-Datenbank. Der Abfragebenachrichtigungsmechanismus von SQL Server 2005 erkennt Änderungen an Daten, die die Ergebnisse einer SQL-Abfrage ungültig machen, und entfernt alle zwischengespeicherten Elemente, die der SQL-Abfrage zugeordnet sind, aus der System.Web.Caching.Cache.
Sie können die klasse SqlCacheDependency verwenden, um elemente zum Cache Ihrer Anwendung hinzuzufügen, die entweder von einer SQL Server Datenbanktabelle oder einer SQL-Abfrage abhängig sind, wenn Sie SQL Server 2005 verwenden. Sie können diese Klasse auch mit der @ OutputCache-Direktive verwenden, um eine zwischengespeicherte Ausgabeseite oder ein Benutzersteuerelement abhängig von einer SQL Server Datenbanktabelle zu erstellen. Schließlich können Sie die klasse SqlCacheDependency mit der @ OutputCache-Seitendirektive verwenden, um eine zwischengespeicherte Ausgabeseite abhängig von den Ergebnissen einer SQL-Abfrage bei Verwendung von SQL Server 2005 zu erstellen. Abfragebenachrichtigungen mit SQL Server 2005 werden für die Direktive @ OutputCache für Benutzersteuerelemente nicht unterstützt.
Note
Damit diese Klasse ordnungsgemäß funktioniert, wenn tabellenbasierte Benachrichtigungen verwendet werden, müssen die Datenbank und alle Tabellen, von denen Sie Abhängigkeiten erstellen möchten, Benachrichtigungen aktiviert haben. Sie können Benachrichtigungen aktivieren, indem Sie Methoden der SqlCacheDependencyAdmin Klasse aufrufen oder das aspnet_regsql.exe Befehlszeilentool verwenden. Darüber hinaus müssen die richtigen Konfigurationseinstellungen in die Web.config Datei der Anwendung aufgenommen werden.
Die Verwendung eines SqlCacheDependency-Objekts mit SQL Server 2005-Abfragebenachrichtigung erfordert keine explizite Konfiguration. Weitere Informationen zu den Typen von Transact-SQL Abfragen, die bei der Verwendung von Abfragebenachrichtigungen zulässig sind, finden Sie in der SQL Server Dokumentation.
Das folgende Beispiel zeigt eine ASP.NET Web.config Datei, die tabellenbasierte Abhängigkeiten einer SQL Server Datenbanktabelle ermöglicht.
<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>
Konstruktoren
| Name | Beschreibung |
|---|---|
| SqlCacheDependency(SqlCommand) |
Initialisiert eine neue Instanz der SqlCacheDependency Klasse, die zum Erstellen einer Cacheschlüsselabhängigkeit bereitgestellt wird SqlCommand . |
| SqlCacheDependency(String, String) |
Initialisiert eine neue Instanz der SqlCacheDependency Klasse, wobei die bereitgestellten Parameter zum Erstellen einer Cacheschlüsselabhängigkeit verwendet werden. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| HasChanged |
Ruft einen Wert ab, der angibt, ob das CacheDependency Objekt geändert wurde. (Geerbt von CacheDependency) |
| UtcLastModified |
Ruft die Zeit ab, zu der die Abhängigkeit zuletzt geändert wurde. (Geerbt von CacheDependency) |
Methoden
| Name | Beschreibung |
|---|---|
| CreateOutputCacheDependency(String) |
Erstellt eine Abhängigkeitsbeziehung zwischen einem Element, das im OutputCache-Objekt einer ASP.NET Anwendung gespeichert ist, und einer SQL Server Datenbanktabelle. |
| DependencyDispose() |
Gibt die von der CacheDependency Klasse verwendeten Ressourcen und alle Von der Klasse abgeleiteten CacheDependencyKlassen frei. (Geerbt von CacheDependency) |
| Dispose() |
Gibt die vom CacheDependency Objekt verwendeten Ressourcen frei. (Geerbt von CacheDependency) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| FinishInit() |
Schließt die Initialisierung des CacheDependency Objekts ab. (Geerbt von CacheDependency) |
| GetFileDependencies() |
Ruft die Dateiabhängigkeiten ab. (Geerbt von CacheDependency) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| GetUniqueID() |
Ruft einen eindeutigen Bezeichner für ein SqlCacheDependency Objekt ab. |
| ItemRemoved() |
Wird aufgerufen, wenn ein überwachter Cacheeintrag entfernt wird. (Geerbt von CacheDependency) |
| KeepDependenciesAlive() |
Aktualisiert die Uhrzeit des letzten Zugriffs jedes Cacheelements, das von diesem Element abhängt. (Geerbt von CacheDependency) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| NotifyDependencyChanged(Object, EventArgs) |
Benachrichtigt das Basisobjekt CacheDependency , dass die durch eine abgeleitete CacheDependency Klasse dargestellte Abhängigkeit geändert wurde. (Geerbt von CacheDependency) |
| SetCacheDependencyChanged(Action<Object,EventArgs>) |
Fügt eine Action-Methode zum Behandeln der Benachrichtigung von interessierten Parteien an Änderungen an dieser Abhängigkeit hinzu. (Geerbt von CacheDependency) |
| SetUtcLastModified(DateTime) |
Markiert den Zeitpunkt, zu dem eine Abhängigkeit zuletzt geändert wurde. (Geerbt von CacheDependency) |
| TakeOwnership() |
Ermöglicht dem ersten Benutzer, den exklusiven Besitz dieser Abhängigkeit zu deklarieren. (Geerbt von CacheDependency) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |