SqlCacheDependency Classe

Definição

Estabelece uma relação entre um item armazenado em um objeto ASP.NET aplicativo e uma tabela de banco de dados específica do Cache SQL Server ou os resultados de uma consulta do 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 o e GridView os SqlDataSource controles 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 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 classe SqlCacheDependency monitora uma tabela de banco de dados SQL Server específica. Quando a tabela é alterada, os itens associados à tabela são removidos do Cacheitem e uma nova versão do item é adicionada ao Cache.

A classe SqlCacheDependency também dá suporte à integração com a classe System.Data.SqlClient.SqlDependency ao usar um banco de dados 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 em cache associados à consulta SQL do System.Web.Caching.Cache.

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

Note

Para que essa classe funcione corretamente ao usar notificações baseadas em tabelas, o banco de dados e todas as tabelas nas quais você deseja criar 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 configurações adequadas devem ser incluídas no arquivo de Web.config do aplicativo.

Usar um objeto SqlCacheDependency com SQL Server notificação de consulta 2005 não requer nenhuma configuração explícita. Consulte a documentação 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 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

Nome Description
SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da SqlCacheDependency classe, usando a fornecida SqlCommand para criar uma dependência de chave de cache.

SqlCacheDependency(String, String)

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

Propriedades

Nome Description
HasChanged

Obtém um valor que indica se o CacheDependency objeto 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

Nome Description
CreateOutputCacheDependency(String)

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

DependencyDispose()

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

(Herdado de CacheDependency)
Dispose()

Libera os recursos usados pelo CacheDependency objeto.

(Herdado de CacheDependency)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FinishInit()

Conclui a inicialização do CacheDependency objeto.

(Herdado de CacheDependency)
GetFileDependencies()

Obtém as dependências de arquivo.

(Herdado de CacheDependency)
GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetUniqueID()

Recupera um identificador exclusivo para um SqlCacheDependency objeto.

ItemRemoved()

Chamado quando uma entrada de cache monitorada é 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 Objectatual.

(Herdado de Object)
NotifyDependencyChanged(Object, EventArgs)

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

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

Adiciona um método Action para lidar com a notificação de partes interessadas em alterações nessa dependência.

(Herdado de CacheDependency)
SetUtcLastModified(DateTime)

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

(Herdado de CacheDependency)
TakeOwnership()

Permite que o primeiro usuário declare a propriedade exclusiva dessa 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