SqlCacheDependency Třída

Definice

Vytvoří relaci mezi položkou uloženou v objektu aplikace Cache ASP.NET a konkrétní SQL Server databázovou tabulkou nebo výsledky dotazu SQL Server 2005. Tuto třídu nelze dědit.

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
Dědičnost
SqlCacheDependency

Příklady

Následující příklad kódu používá SqlDataSource ovládací prvky a GridView k zobrazení tabulky databáze. Po načtení stránky se stránka pokusí vytvořit SqlCacheDependency objekt. Po vytvoření objektu SqlCacheDependency stránka přidá položku do objektu Cache se závislostí na objektu SqlCacheDependency . Měli byste použít zpracování výjimek podobné tomu, které je tady uvedené.

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

Poznámky

Ve všech podporovaných verzích SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 a SQL Server 2005) SqlCacheDependency třída monitoruje konkrétní SQL Server databázovou tabulku. Když se tabulka změní, položky přidružené k tabulce se odeberou z objektu Cachea do objektu se přidá Cachenová verze položky.

Třída SqlCacheDependency také podporuje integraci s System.Data.SqlClient.SqlDependency třídou při použití databáze SQL Server 2005. Mechanismus oznamování dotazů SQL Server 2005 detekuje změny dat, které zneplatní výsledky dotazu SQL, a odebere všechny položky v mezipaměti přidružené k dotazu SQL z System.Web.Caching.Cache.

Při použití SQL Server 2005 můžete do aplikací Cache přidat SqlCacheDependency položky, které jsou závislé na SQL Server databázové tabulce nebo na dotaz SQL. Tuto třídu můžete také použít spolu s @ OutputCache direktivou k vytvoření stránky v mezipaměti výstupu nebo uživatelského ovládacího prvku závislého na SQL Server databázové tabulce. Nakonec můžete použít SqlCacheDependency třídu s direktivou @ OutputCache page k vytvoření stránky v mezipaměti výstupu závislé na výsledcích dotazu SQL při použití SQL Server 2005. Oznámení dotazu pomocí SQL Server 2005 nejsou podporovány direktivou @ OutputCache pro uživatelské ovládací prvky.

Poznámka

Aby tato třída fungovala správně při použití tabulkových oznámení, musí mít databáze a všechny tabulky, na kterých chcete vytvořit závislosti, povolená oznámení. Oznámení můžete povolit voláním metod SqlCacheDependencyAdmin třídy nebo pomocí nástroje příkazového aspnet_regsql.exe řádku. Kromě toho musí být v souboru Web.config aplikace obsažena správná nastavení konfigurace.

Použití objektu s oznámením SqlCacheDependency dotazu SQL Server 2005 nevyžaduje žádnou explicitní konfiguraci. Informace o omezeních typů dotazů Transact-SQL, které jsou povolené při použití oznámení dotazů, najdete v dokumentaci k SQL Server.

Následující příklad ukazuje ASP.NET Web.config soubor, který umožňuje závislosti založené na tabulce na SQL Server databázové tabulce.

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

Inicializuje novou instanci SqlCacheDependency třídy pomocí zadané SqlCommand k vytvoření závislosti klíče mezipaměti.

SqlCacheDependency(String, String)

Inicializuje novou instanci třídy pomocí zadaných SqlCacheDependency parametrů k vytvoření závislosti klíče mezipaměti.

Vlastnosti

HasChanged

Získá hodnotu označující, zda se CacheDependency objekt změnil.

(Zděděno od CacheDependency)
UtcLastModified

Získá čas, kdy byla závislost naposledy změněna.

(Zděděno od CacheDependency)

Metody

CreateOutputCacheDependency(String)

Vytvoří relaci závislosti mezi položkou, která je uložena v objektu aplikace ASP.NET OutputCache a SQL Server databázové tabulky.

DependencyDispose()

Uvolní prostředky používané třídou a všemi třídami CacheDependency , které jsou odvozeny z CacheDependency.

(Zděděno od CacheDependency)
Dispose()

Uvolní prostředky používané objektem CacheDependency .

(Zděděno od CacheDependency)
Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FinishInit()

Dokončí inicializaci objektu CacheDependency .

(Zděděno od CacheDependency)
GetFileDependencies()

Získá závislosti souborů.

(Zděděno od CacheDependency)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
GetUniqueID()

Načte jedinečný identifikátor objektu SqlCacheDependency .

ItemRemoved()

Volá se při odebrání položky monitorované mezipaměti.

(Zděděno od CacheDependency)
KeepDependenciesAlive()

Aktualizace čas posledního přístupu každé položky mezipaměti, která na této položce závisí.

(Zděděno od CacheDependency)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
NotifyDependencyChanged(Object, EventArgs)

Upozorní základní CacheDependency objekt, že závislost reprezentovaná odvozenou CacheDependency třídou se změnila.

(Zděděno od CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Přidá metodu Action, která zpracuje upozornění zúčastněné strany na změny této závislosti.

(Zděděno od CacheDependency)
SetUtcLastModified(DateTime)

Označuje čas poslední změny závislosti.

(Zděděno od CacheDependency)
TakeOwnership()

Umožňuje prvnímu uživateli deklarovat výhradní vlastnictví této závislosti.

(Zděděno od CacheDependency)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také