Freigeben über


SqlCacheDependency Klasse

Definition

Legt eine Beziehung zwischen einem Element, das im Cache-Objekt einer ASP.NET-Anwendung gespeichert ist, und entweder einer bestimmten SQL Server-Datenbanktabelle oder den Ergebnissen einer SQL Server 2005-Abfrage fest. 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 Steuerelemente und 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 ein Element mit einer Abhängigkeit vom SqlCacheDependency -Objekt hinzu. Sie sollten die Ausnahmebehandlung ähnlich der hier gezeigten 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 dem Cachehinzugefügt.

Die SqlCacheDependency -Klasse unterstützt auch die Integration in die System.Data.SqlClient.SqlDependency -Klasse 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 System.Web.Caching.Cachezugeordnet sind.

Sie können die SqlCacheDependency -Klasse verwenden, um Ihrer Anwendung Cache Elemente hinzuzufügen, die entweder von einer SQL Server-Datenbanktabelle oder von einer SQL-Abfrage abhängig sind, wenn SIE SQL Server 2005 verwenden. Sie können diese Klasse auch mit der @ OutputCache -Anweisung verwenden, um eine zwischengespeicherte Ausgabeseite oder ein Benutzersteuerelement von einer SQL Server-Datenbanktabelle abhängig zu machen. Schließlich können Sie die SqlCacheDependency -Klasse mit der @ OutputCache Seitendirektive verwenden, um eine zwischengespeicherte Ausgabeseite von den Ergebnissen einer SQL-Abfrage abhängig zu machen, wenn SQL Server 2005 verwendet wird. Abfragebenachrichtigungen mit SQL Server 2005 werden für die @ OutputCache Direktive für Benutzersteuerelemente nicht unterstützt.

Hinweis

Damit diese Klasse bei verwendung tabellenbasierter Benachrichtigungen ordnungsgemäß funktioniert, müssen für die Datenbank und alle Tabellen, von denen Sie Abhängigkeiten erstellen möchten, Benachrichtigungen aktiviert sein. Sie können Benachrichtigungen aktivieren, indem Sie Methoden der SqlCacheDependencyAdmin -Klasse aufrufen oder das Befehlszeilentool aspnet_regsql.exe verwenden. Darüber hinaus müssen die richtigen Konfigurationseinstellungen in der Web.config-Datei der Anwendung enthalten sein.

Für die Verwendung eines SqlCacheDependency Objekts mit SQL Server 2005-Abfragebenachrichtigungen ist keine explizite Konfiguration erforderlich. Informationen zu Einschränkungen für die Typen von Transact-SQL-Abfragen, die bei 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 von 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

SqlCacheDependency(SqlCommand)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit dem angegebenen SqlCommand, um eine Abhängigkeit zwischen Cache und Schlüssel zu erstellen.

SqlCacheDependency(String, String)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit den angegebenen Parametern zum Erstellen einer Abhängigkeit zwischen Cache und Schlüssel.

Eigenschaften

HasChanged

Ruft einen Wert ab, der angibt, ob sich das CacheDependency-Objekt geändert hat.

(Geerbt von CacheDependency)
UtcLastModified

Ruft die Zeit ab, zu der die Abhängigkeit zuletzt geändert wurde.

(Geerbt von CacheDependency)

Methoden

CreateOutputCacheDependency(String)

Erstellt eine Abhängigkeitsbeziehung zwischen einem Element, das im OutputCache-Objekt einer ASP.NET-Anwendung und in einer SQL Server-Datenbanktabelle gespeichert ist.

DependencyDispose()

Gibt die Ressourcen frei, die von der CacheDependency-Klasse sowie allen Klassen verwendet werden, die von CacheDependency abgeleitet sind.

(Geerbt von CacheDependency)
Dispose()

Gibt die vom CacheDependency-Objekt verwendeten Ressourcen frei.

(Geerbt von CacheDependency)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(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()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den 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 den Zeitpunkt des letzten Zugriffs von jedem Cacheelement, das von diesem Element abhängig ist.

(Geerbt von CacheDependency)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
NotifyDependencyChanged(Object, EventArgs)

Benachrichtigt das Basis-CacheDependency-Objekt darüber, dass die durch eine abgeleitete CacheDependency-Klasse dargestellte Abhängigkeit geändert wurde.

(Geerbt von CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Fügt eine Aktionsmethode zum Behandeln von Benachrichtigungen der beteiligten Partei über Änderungen an dieser Abhängigkeit hinzu.

(Geerbt von CacheDependency)
SetUtcLastModified(DateTime)

Markiert die Zeit, zu der eine Abhängigkeit zuletzt geändert wurde.

(Geerbt von CacheDependency)
TakeOwnership()

Ermöglicht es 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