Udostępnij za pośrednictwem


SqlCacheDependency Klasa

Definicja

Ustanawia relację między elementem przechowywanym w obiekcie aplikacji Cache ASP.NET a określoną tabelą bazy danych programu SQL Server lub wynikami zapytania programu 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

Poniższy przykład kodu używa SqlDataSource kontrolek i GridView do wyświetlania tabeli bazy danych. Po załadowaniu strony strona próbuje utworzyć SqlCacheDependency obiekt. Po utworzeniu SqlCacheDependency obiektu strona dodaje element do Cache obiektu 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 programu SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 i SQL Server 2005) SqlCacheDependency klasa monitoruje określoną tabelę bazy danych programu 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ą podczas korzystania z System.Data.SqlClient.SqlDependency bazy danych programu SQL Server 2005. Mechanizm powiadamiania o zapytaniu programu 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.Cachepliku .

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

Uwaga

Aby ta klasa działała poprawnie podczas korzystania z powiadomień opartych na tabeli, baza danych i wszystkie tabele, które mają być zależne od, 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 odpowiednie ustawienia konfiguracji należy uwzględnić w pliku Web.config aplikacji.

Używanie obiektu z powiadomieniem SqlCacheDependency zapytania programu SQL Server 2005 nie wymaga żadnej jawnej konfiguracji. Zapoznaj się z dokumentacją programu SQL Server, aby uzyskać informacje o ograniczeniach typów zapytań Języka Transact-SQL, które są dozwolone podczas korzystania z powiadomień o zapytaniach.

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

<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 programu 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 bieżące wystąpienie.

(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 deklarowanie 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ż