SqlCacheDependency Klasse

Definition

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
SqlCacheDependency

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)

Gilt für:

Weitere Informationen