Compartir vía


SqlCacheDependency Clase

Definición

Establece una relación entre un elemento almacenado en un objeto Cache de aplicación ASP.NET y una tabla de base de datos de SQL Server específica o los resultados de una consulta de SQL Server 2005. Esta clase no puede heredarse.

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

Ejemplos

En el ejemplo de código siguiente se usan los SqlDataSource controles y GridView para mostrar una tabla de base de datos. Cuando se carga la página, la página intenta crear un SqlCacheDependency objeto . Una vez creado el SqlCacheDependency objeto, la página agrega un elemento a Cache con una dependencia en el SqlCacheDependency objeto . Debe usar el control de excepciones similar al que se muestra aquí.

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

Comentarios

En todas las versiones compatibles de SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 y SQL Server 2005), la SqlCacheDependency clase supervisa una tabla de base de datos de SQL Server específica. Cuando cambia la tabla, los elementos asociados a la tabla se quitan de Cachey se agrega una nueva versión del elemento a Cache.

La SqlCacheDependency clase también admite la integración con la System.Data.SqlClient.SqlDependency clase cuando se usa una base de datos de SQL Server 2005. El mecanismo de notificación de consulta de SQL Server 2005 detecta cambios en los datos que invalidan los resultados de una consulta SQL y quita los elementos almacenados en caché asociados a la consulta SQL de System.Web.Caching.Cache.

Puede usar la SqlCacheDependency clase para agregar elementos a las aplicaciones Cache que dependen de una tabla de base de datos de SQL Server o de una consulta SQL al usar SQL Server 2005. También puede usar esta clase con la @ OutputCache directiva para crear una página almacenada en caché de salida o un control de usuario dependiente de una tabla de base de datos de SQL Server. Por último, puede usar la SqlCacheDependency clase con la @ OutputCache directiva page para que una página almacenada en caché de salida dependa de los resultados de una consulta SQL al usar SQL Server 2005. La notificación de consulta con SQL Server 2005 no se admite en la @ OutputCache directiva para los controles de usuario.

Nota

Para que esta clase funcione correctamente cuando se usan notificaciones basadas en tablas, la base de datos y las tablas en las que desea realizar dependencias deben tener habilitadas las notificaciones. Puede habilitar las notificaciones llamando a métodos de la SqlCacheDependencyAdmin clase o mediante la herramienta de aspnet_regsql.exe línea de comandos. Además, los valores de configuración adecuados deben incluirse en el archivo Web.config de la aplicación.

El uso de un SqlCacheDependency objeto con la notificación de consulta de SQL Server 2005 no requiere ninguna configuración explícita. Consulte la documentación de SQL Server para obtener información sobre las restricciones sobre los tipos de consultas de Transact-SQL que se permiten al usar la notificación de consulta.

En el ejemplo siguiente se muestra un archivo ASP.NET Web.config que habilita las dependencias basadas en tablas en una tabla de base de datos de 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>

Constructores

SqlCacheDependency(SqlCommand)

Inicializa una nueva instancia de la clase SqlCacheDependency, utilizando el SqlCommand que se proporciona para crear una dependencia de clave de caché.

SqlCacheDependency(String, String)

Inicializa una nueva instancia de la clase SqlCacheDependency, utilizando los parámetros proporcionados para crear una dependencia de clave de caché.

Propiedades

HasChanged

Obtiene un valor que indica si el objeto CacheDependency ha cambiado.

(Heredado de CacheDependency)
UtcLastModified

Obtiene la hora a la que se cambió la dependencia por última vez.

(Heredado de CacheDependency)

Métodos

CreateOutputCacheDependency(String)

Crea una relación de dependencia entre un elemento que está almacenado en el objeto OutputCache de una aplicación ASP.NET y una tabla de base de datos de SQL Server.

DependencyDispose()

Libera los recursos utilizados por la clase CacheDependency y cualquier clase que derive de CacheDependency.

(Heredado de CacheDependency)
Dispose()

Libera los recursos que usa el objeto CacheDependency.

(Heredado de CacheDependency)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
FinishInit()

Finaliza la inicialización del objeto CacheDependency.

(Heredado de CacheDependency)
GetFileDependencies()

Obtiene las dependencias de archivo.

(Heredado de CacheDependency)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetUniqueID()

Recupera un identificador único para un objeto SqlCacheDependency.

ItemRemoved()

Se llama cuando se quita una entrada de caché supervisada.

(Heredado de CacheDependency)
KeepDependenciesAlive()

Actualiza la hora de último acceso de cada elemento en caché que dependa de este elemento.

(Heredado de CacheDependency)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
NotifyDependencyChanged(Object, EventArgs)

Notifica al objeto CacheDependency base que la dependencia representada por una clase CacheDependency derivada ha cambiado.

(Heredado de CacheDependency)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Agrega un método de acción para controlar la notificación a la parte interesada de los cambios realizados en esta dependencia.

(Heredado de CacheDependency)
SetUtcLastModified(DateTime)

Marca la hora a la que se cambió una dependencia por última vez.

(Heredado de CacheDependency)
TakeOwnership()

Permite que el primer usuario declare la propiedad exclusiva de esta dependencia.

(Heredado de CacheDependency)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también