SqlCacheDependency Osztály

Definíció

Kapcsolatot hoz létre egy ASP.NET alkalmazás Cache objektumában tárolt elem és egy adott SQL Server adatbázistábla vagy egy SQL Server 2005-ös lekérdezés eredményei között. Ez az osztály nem örökölhető.

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
Öröklődés
SqlCacheDependency

Példák

Az alábbi példakód egy adatbázistábla megjelenítéséhez használja a vezérlőket és SqlDataSource a GridView vezérlőket. A lap betöltésekor az oldal megpróbál létrehozni egy objektumot SqlCacheDependency . Az SqlCacheDependency objektum létrehozása után a lap hozzáad egy elemet az Cache objektumtól SqlCacheDependency függő elemhez. Az itt láthatóhoz hasonló kivételkezelést kell használnia.

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

Megjegyzések

A SQL Server összes támogatott verzióján (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 és 2005 SQL Server) a SqlCacheDependency osztály egy adott SQL Server adatbázistáblát figyel. Amikor a tábla megváltozik, a rendszer eltávolítja a táblához társított elemeket a Cachetáblából, és hozzáadja az elem új verzióját a Cache.

A SqlCacheDependency osztály a System.Data.SqlClient.SqlDependency osztálysal való integrációt is támogatja SQL Server 2005-ös adatbázis használatakor. A 2005-ös SQL Server lekérdezésértesítési mechanizmusa észleli az SQL-lekérdezés eredményeit érvénytelenítő adatok módosításait, és eltávolítja az SQL-lekérdezéshez társított gyorsítótárazott elemeket a System.Web.Caching.Cache.

A SqlCacheDependency osztály használatával hozzáadhat elemeket az alkalmazás Cache, amelyek egy SQL Server adatbázistáblától vagy egy SQL-lekérdezéstől függenek a 2005-ös SQL Server használatakor. Ezt az osztályt a @ OutputCache irányelvvel is használhatja, hogy egy kimeneti gyorsítótárazott lapot vagy egy felhasználói vezérlőt függővé tegyen egy SQL Server adatbázistáblától. Végül használhatja a SqlCacheDependency osztályt a @ OutputCache lap irányelvével, hogy a kimeneti gyorsítótárazott lap függjön az SQL-lekérdezés eredményeitől a 2005-ös SQL Server használatakor. A SQL Server 2005-ös lekérdezésértesítés nem támogatott a felhasználói vezérlők @ OutputCache irányelvében.

Note

Ahhoz, hogy ez az osztály megfelelően működjön táblaalapú értesítések használatakor, az adatbázisnak és azoknak a tábláknak, amelyekről függőségeket szeretne létrehozni, engedélyezni kell az értesítéseket. Az értesítéseket az SqlCacheDependencyAdmin osztály metódusainak meghívásával vagy a aspnet_regsql.exe parancssori eszközzel engedélyezheti. Emellett a megfelelő konfigurációs beállításoknak szerepelnie kell az alkalmazás Web.config fájljában.

A SqlCacheDependency objektum SQL Server 2005-ös lekérdezésértesítéssel való használata nem igényel explicit konfigurációt. A SQL Server dokumentációjában tájékozódhat a lekérdezésértesítések használatakor engedélyezett Transact-SQL lekérdezések típusaira vonatkozó korlátozásokról.

Az alábbi példa egy ASP.NET Web.config fájlt mutat be, amely lehetővé teszi a táblaalapú függőségeket egy SQL Server adatbázistáblán.

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

Konstruktorok

Name Description
SqlCacheDependency(SqlCommand)

Inicializálja az SqlCacheDependency osztály új példányát SqlCommand a megadott gyorsítótárkulcs-függőség létrehozásához.

SqlCacheDependency(String, String)

Inicializálja az SqlCacheDependency osztály új példányát a megadott paraméterekkel egy gyorsítótárkulcs-függőség létrehozásához.

Tulajdonságok

Name Description
HasChanged

Beolvas egy értéket, amely jelzi, hogy az CacheDependency objektum megváltozott-e.

(Öröklődés forrása CacheDependency)
UtcLastModified

A függőség legutóbbi módosításának időpontját kapja meg.

(Öröklődés forrása CacheDependency)

Metódusok

Name Description
CreateOutputCacheDependency(String)

Függőségi kapcsolatot hoz létre egy ASP.NET alkalmazás OutputCache objektumában és egy SQL Server adatbázistáblában tárolt elem között.

DependencyDispose()

Felszabadítja az osztály által használt erőforrásokat és az CacheDependency osztályból származó összes osztályt CacheDependency.

(Öröklődés forrása CacheDependency)
Dispose()

Felszabadítja az objektum által CacheDependency használt erőforrásokat.

(Öröklődés forrása CacheDependency)
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
FinishInit()

Befejezi az objektum inicializálását CacheDependency .

(Öröklődés forrása CacheDependency)
GetFileDependencies()

Lekéri a fájlfüggőségeket.

(Öröklődés forrása CacheDependency)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
GetUniqueID()

Egy objektum egyedi azonosítóját SqlCacheDependency kéri le.

ItemRemoved()

A figyelt gyorsítótár-bejegyzés eltávolításakor hívható meg.

(Öröklődés forrása CacheDependency)
KeepDependenciesAlive()

Frissíti az elemtől függő összes gyorsítótárelem utolsó hozzáférési idejét.

(Öröklődés forrása CacheDependency)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
NotifyDependencyChanged(Object, EventArgs)

Értesíti az alapobjektumot CacheDependency , hogy a származtatott CacheDependency osztály által képviselt függőség megváltozott.

(Öröklődés forrása CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Hozzáad egy műveletmetódust, amely kezeli az érdekelt fél értesítését a függőség módosításaiban.

(Öröklődés forrása CacheDependency)
SetUtcLastModified(DateTime)

A függőség legutóbbi módosításának időpontját jelöli.

(Öröklődés forrása CacheDependency)
TakeOwnership()

Lehetővé teszi, hogy az első felhasználó deklarálja a függőség kizárólagos tulajdonjogát.

(Öröklődés forrása CacheDependency)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Lásd még