SqlCacheDependency Classe

Définition

Établit une relation entre un élément stocké dans l’objet Cache d’une application ASP.NET et une table de base de données SQL Server spécifique ou les résultats d’une requête SQL Server 2005. Cette classe ne peut pas être héritée.

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
Héritage
SqlCacheDependency

Exemples

L’exemple de code suivant utilise les SqlDataSource contrôles et GridView pour afficher une table de base de données. Lorsque la page est chargée, la page tente de créer un SqlCacheDependency objet. Une fois l’objet SqlCacheDependency créé, la page ajoute un élément au Cache avec une dépendance sur l’objet SqlCacheDependency . Vous devez utiliser une gestion des exceptions similaire à celle présentée ici.

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

Remarques

Sur toutes les versions prises en charge de SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 et SQL Server 2005), la SqlCacheDependency classe surveille une table de base de données SQL Server spécifique. Lorsque la table change, les éléments associés à la table sont supprimés du Cacheet une nouvelle version de l’élément est ajoutée à .Cache

La SqlCacheDependency classe prend également en charge l’intégration à la classe lors de l’utilisation System.Data.SqlClient.SqlDependency d’une base de données SQL Server 2005. Le mécanisme de notification de requête de SQL Server 2005 détecte les modifications apportées aux données qui invalident les résultats d’une requête SQL et supprime tous les éléments mis en cache associés à la requête SQL du System.Web.Caching.Cache.

Vous pouvez utiliser la SqlCacheDependency classe pour ajouter à votre application des éléments qui dépendent d’une Cache table de base de données SQL Server ou d’une requête SQL lors de l’utilisation de SQL Server 2005. Vous pouvez également utiliser cette classe avec la @ OutputCache directive pour rendre une page mise en cache de sortie ou un contrôle utilisateur dépendant d’une table de base de données SQL Server. Enfin, vous pouvez utiliser la SqlCacheDependency classe avec la @ OutputCache directive page pour rendre une page mise en cache de sortie dépendante des résultats d’une requête SQL lors de l’utilisation de SQL Server 2005. La notification de requête utilisant SQL Server 2005 n’est pas prise en charge sur la directive pour les @ OutputCache contrôles utilisateur.

Notes

Pour que cette classe fonctionne correctement lors de l’utilisation de notifications basées sur des tables, les notifications doivent être activées pour la base de données et les tables sur lesquelles vous souhaitez créer des dépendances. Vous pouvez activer les notifications en appelant les méthodes de la SqlCacheDependencyAdmin classe ou en utilisant l’outil aspnet_regsql.exe en ligne de commande. En outre, les paramètres de configuration appropriés doivent être inclus dans le fichier Web.config de l’application.

L’utilisation d’un SqlCacheDependency objet avec SQL Server notification de requête 2005 ne nécessite aucune configuration explicite. Consultez la documentation SQL Server pour plus d’informations sur les restrictions sur les types de requêtes Transact-SQL autorisées lors de l’utilisation de la notification de requête.

L’exemple suivant montre un fichier ASP.NET Web.config qui active les dépendances basées sur des tables sur une table SQL Server table de base de données.

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

Constructeurs

SqlCacheDependency(SqlCommand)

Initialise une nouvelle instance de la classe SqlCacheDependency, à l'aide de la SqlCommand fournie pour créer une dépendance de clé de cache.

SqlCacheDependency(String, String)

Initialise une nouvelle instance de la classe SqlCacheDependency à l'aide des paramètres fournis pour créer une dépendance de clé de cache.

Propriétés

HasChanged

Obtient une valeur indiquant si l'objet CacheDependency a changé.

(Hérité de CacheDependency)
UtcLastModified

Obtient l'heure de la dernière modification de la dépendance.

(Hérité de CacheDependency)

Méthodes

CreateOutputCacheDependency(String)

Crée une relation de dépendance entre un élément stocké dans l'objet OutputCache d'une application ASP.NET et une table de base de données SQL Server.

DependencyDispose()

Libère les ressources utilisées par la classe CacheDependency et toutes classes qui dérivent de CacheDependency.

(Hérité de CacheDependency)
Dispose()

Libère les ressources utilisées par l’objet CacheDependency.

(Hérité de CacheDependency)
Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
FinishInit()

Termine l'initialisation de l'objet CacheDependency.

(Hérité de CacheDependency)
GetFileDependencies()

Obtient les dépendances de fichier.

(Hérité de CacheDependency)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetUniqueID()

Récupère un identificateur unique pour un objet SqlCacheDependency.

ItemRemoved()

Appelé lorsqu’une entrée de cache surveillée est supprimée.

(Hérité de CacheDependency)
KeepDependenciesAlive()

Met à jour l’heure du dernier accès de chaque élément de cache qui dépend de cet élément.

(Hérité de CacheDependency)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
NotifyDependencyChanged(Object, EventArgs)

Avertit l'objet CacheDependency de base que la dépendance représentée par une classe CacheDependency dérivée a changé.

(Hérité de CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Ajoute une méthode d’action pour notifier les parties intéressées par les modifications apportées à cette dépendance.

(Hérité de CacheDependency)
SetUtcLastModified(DateTime)

Marque l'heure de la dernière modification d'une dépendance.

(Hérité de CacheDependency)
TakeOwnership()

Permet au premier utilisateur de déclarer la propriété exclusive de cette dépendance.

(Hérité de CacheDependency)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Voir aussi