SqlCacheDependency Klasa

Definicja

Ustanawia relację między elementem przechowywanym w obiekcie aplikacji Cache ASP.NET a konkretną tabelą bazy danych SQL Server lub wynikami zapytania SQL Server 2005. Klasa ta nie może być dziedziczona.

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
Dziedziczenie
SqlCacheDependency

Przykłady

W poniższym przykładzie kodu użyto SqlDataSource kontrolek i GridView do wyświetlenia tabeli bazy danych. Po załadowaniu strony strona próbuje utworzyć SqlCacheDependency obiekt. Po utworzeniu SqlCacheDependency obiektu strona dodaje element do obiektu Cache z zależnością od SqlCacheDependency obiektu. Należy użyć obsługi wyjątków podobnych do pokazanych tutaj.

<%@ 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>

Uwagi

We wszystkich obsługiwanych wersjach SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 i SQL Server 2005) SqlCacheDependency klasa monitoruje określoną tabelę bazy danych SQL Server. Po zmianie tabeli elementy skojarzone z tabelą zostaną usunięte z Cacheelementu , a nowa wersja elementu zostanie dodana do elementu Cache.

Klasa SqlCacheDependency obsługuje również integrację z klasą System.Data.SqlClient.SqlDependency podczas korzystania z bazy danych SQL Server 2005. Mechanizm powiadamiania zapytania SQL Server 2005 wykrywa zmiany danych, które unieważniają wyniki zapytania SQL i usuwa wszystkie buforowane elementy skojarzone z zapytaniem SQL z .System.Web.Caching.Cache

Możesz użyć SqlCacheDependency klasy , aby dodać elementy do aplikacjiCache, które są zależne od tabeli bazy danych SQL Server lub zapytania SQL podczas korzystania z SQL Server 2005. Możesz również użyć tej klasy z dyrektywą @ OutputCache , aby utworzyć stronę z pamięcią podręczną danych wyjściowych lub kontrolkę użytkownika zależną od tabeli bazy danych SQL Server. Na koniec możesz użyć SqlCacheDependency klasy z dyrektywą @ OutputCache page, aby strona z pamięcią podręczną danych wyjściowych zależała od wyników zapytania SQL podczas korzystania z SQL Server 2005. Powiadomienie o zapytaniach przy użyciu SQL Server 2005 nie jest obsługiwane w @ OutputCache dyrektywie dotyczącej kontrolek użytkownika.

Uwaga

Aby ta klasa działała prawidłowo podczas korzystania z powiadomień opartych na tabelach, baza danych i wszystkie tabele, na których chcesz tworzyć zależności, muszą mieć włączone powiadomienia. Powiadomienia można włączyć, wywołując metody SqlCacheDependencyAdmin klasy lub za pomocą aspnet_regsql.exe narzędzia wiersza polecenia. Ponadto należy uwzględnić odpowiednie ustawienia konfiguracji w pliku Web.config aplikacji.

Używanie obiektu z powiadomieniem SqlCacheDependency o zapytaniu SQL Server 2005 nie wymaga jawnej konfiguracji. Zapoznaj się z dokumentacją SQL Server, aby uzyskać informacje na temat ograniczeń dotyczących typów zapytań języka Transact-SQL, które są dozwolone podczas korzystania z powiadomień o zapytaniach.

W poniższym przykładzie pokazano plik ASP.NET Web.config, który umożliwia zależności oparte na tabeli SQL Server bazy danych.

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

Inicjuje SqlCacheDependency nowe wystąpienie klasy przy użyciu podanej SqlCommand metody w celu utworzenia zależności klucza pamięci podręcznej.

SqlCacheDependency(String, String)

Inicjuje SqlCacheDependency nowe wystąpienie klasy przy użyciu podanych parametrów w celu utworzenia zależności klucza pamięci podręcznej.

Właściwości

HasChanged

Pobiera wartość wskazującą CacheDependency , czy obiekt uległ zmianie.

(Odziedziczone po CacheDependency)
UtcLastModified

Pobiera czas ostatniej zmiany zależności.

(Odziedziczone po CacheDependency)

Metody

CreateOutputCacheDependency(String)

Tworzy relację zależności między elementem przechowywanym w obiekcie aplikacji OutputCache ASP.NET a tabelą bazy danych SQL Server.

DependencyDispose()

Zwalnia zasoby używane przez klasę CacheDependency i wszystkie klasy pochodzące z CacheDependencyklasy .

(Odziedziczone po CacheDependency)
Dispose()

Zwalnia zasoby używane przez CacheDependency obiekt.

(Odziedziczone po CacheDependency)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
FinishInit()

Kończy inicjowanie CacheDependency obiektu.

(Odziedziczone po CacheDependency)
GetFileDependencies()

Pobiera zależności plików.

(Odziedziczone po CacheDependency)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
GetUniqueID()

Pobiera unikatowy identyfikator SqlCacheDependency obiektu.

ItemRemoved()

Wywoływana po usunięciu monitorowanej pamięci podręcznej.

(Odziedziczone po CacheDependency)
KeepDependenciesAlive()

Aktualizuje czas ostatniego dostępu każdego elementu pamięci podręcznej, który zależy od tego elementu.

(Odziedziczone po CacheDependency)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
NotifyDependencyChanged(Object, EventArgs)

Powiadamia obiekt podstawowy CacheDependency , że zależność reprezentowana przez klasę pochodną CacheDependency uległa zmianie.

(Odziedziczone po CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Dodaje metodę Action do obsługi powiadamiania zainteresowanej strony o zmianach w tej zależności.

(Odziedziczone po CacheDependency)
SetUtcLastModified(DateTime)

Oznacza czas ostatniej zmiany zależności.

(Odziedziczone po CacheDependency)
TakeOwnership()

Umożliwia pierwszemu użytkownikowi zadeklarowanie wyłącznej własności tej zależności.

(Odziedziczone po CacheDependency)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też