Compartilhar via


SqlCacheDependency Classe

Definição

Estabelece uma relação entre um item armazenado em um objeto Cache do aplicativo ASP.NET e uma tabela de banco de dados do SQL Server específica ou os resultados de uma consulta no SQL Server 2005. Essa classe não pode ser herdada.

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
Herança
SqlCacheDependency

Exemplos

O exemplo de código a seguir usa os SqlDataSource controles e GridView para exibir uma tabela de banco de dados. Quando a página é carregada, a página tenta criar um SqlCacheDependency objeto . Depois que o SqlCacheDependency objeto é criado, a página adiciona um item ao Cache com uma dependência no SqlCacheDependency objeto . Você deve usar o tratamento de exceção semelhante ao mostrado aqui.

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

Comentários

Em todas as versões com suporte do SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 e SQL Server 2005), a SqlCacheDependency classe monitora uma tabela de banco de dados específica do SQL Server. Quando a tabela é alterada, os itens associados à tabela são removidos do Cachee uma nova versão do item é adicionada ao Cache.

A SqlCacheDependency classe também dá suporte à integração com a System.Data.SqlClient.SqlDependency classe ao usar um banco de dados do SQL Server 2005. O mecanismo de notificação de consulta do SQL Server 2005 detecta alterações nos dados que invalidam os resultados de uma consulta SQL e remove todos os itens armazenados em cache associados à consulta SQL do System.Web.Caching.Cache.

Você pode usar a SqlCacheDependency classe para adicionar itens aos do aplicativo que dependem de uma tabela de banco de dados do Cache SQL Server ou de uma consulta SQL ao usar o SQL Server 2005. Você também pode usar essa classe com a @ OutputCache diretiva para tornar uma página armazenada em cache de saída ou um controle de usuário dependente de uma tabela de banco de dados do SQL Server. Por fim, você pode usar a SqlCacheDependency classe com a @ OutputCache diretiva page para tornar uma página armazenada em cache de saída dependente dos resultados de uma consulta SQL ao usar o SQL Server 2005. Não há suporte para notificação de consulta usando o SQL Server 2005 na @ OutputCache diretiva para controles de usuário.

Observação

Para que essa classe funcione corretamente ao usar notificações baseadas em tabela, o banco de dados e as tabelas nas quais você deseja fazer dependências devem ter as notificações habilitadas. Você pode habilitar notificações chamando métodos da SqlCacheDependencyAdmin classe ou usando a aspnet_regsql.exe ferramenta de linha de comando. Além disso, as definições de configuração adequadas devem ser incluídas no arquivo Web.config do aplicativo.

O uso de um SqlCacheDependency objeto com a notificação de consulta do SQL Server 2005 não requer nenhuma configuração explícita. Consulte a documentação do SQL Server para obter informações sobre restrições sobre os tipos de consultas Transact-SQL permitidas ao usar a notificação de consulta.

O exemplo a seguir mostra um arquivo ASP.NET Web.config que permite dependências baseadas em tabela em uma tabela de banco de dados do 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>

Construtores

SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da classe SqlCacheDependency usando o SqlCommand fornecido para criar uma dependência chave de cache.

SqlCacheDependency(String, String)

Inicializa uma nova instância da classe SqlCacheDependency usando os parâmetros fornecidos para criar uma dependência chave de cache.

Propriedades

HasChanged

Obtém um valor que indica se o objeto CacheDependency foi alterado.

(Herdado de CacheDependency)
UtcLastModified

Obtém a hora em que a dependência foi alterada pela última vez.

(Herdado de CacheDependency)

Métodos

CreateOutputCacheDependency(String)

Cria uma relação de dependência entre um item que é armazenado em um objeto OutputCache do aplicativo ASP.NET e uma tabela de banco de dados do SQL Server.

DependencyDispose()

Libera os recursos usados pela classe CacheDependency e pelas classes que derivam de CacheDependency.

(Herdado de CacheDependency)
Dispose()

Libera os recursos usados pelo objeto CacheDependency.

(Herdado de CacheDependency)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FinishInit()

Conclui a inicialização do objeto CacheDependency.

(Herdado de CacheDependency)
GetFileDependencies()

Obtém as dependências de arquivo.

(Herdado de CacheDependency)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetUniqueID()

Recupera um identificador exclusivo de um objeto SqlCacheDependency.

ItemRemoved()

Chamado quando uma entrada de cache monitorado é removida.

(Herdado de CacheDependency)
KeepDependenciesAlive()

Atualiza a hora do último acesso de cada item de cache que depende desse item.

(Herdado de CacheDependency)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
NotifyDependencyChanged(Object, EventArgs)

Notifica o objeto CacheDependency de base de que a dependência representada por uma classe CacheDependency derivada foi alterada.

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

Adiciona um método de Ação para tratar da notificação de terceiros interessados nas alterações nessa dependência.

(Herdado de CacheDependency)
SetUtcLastModified(DateTime)

Marca a hora em que a dependência foi alterada pela última vez.

(Herdado de CacheDependency)
TakeOwnership()

Permite que o primeiro usuário declare a propriedade exclusiva desta dependência.

(Herdado de CacheDependency)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também