SqlCacheDependency Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Estabelece uma relação entre um item armazenado no objeto Cache de uma aplicação ASP.NET e uma tabela específica de base de dados de SQL Server ou os resultados de uma consulta SQL Server 2005. Esta 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
Exemplos
O exemplo de código seguinte utiliza os SqlDataSource controlos e GridView para exibir uma tabela de base de dados. Quando a página é carregada, a página tenta criar um SqlCacheDependency objeto. Depois de criado o SqlCacheDependency objeto, a página adiciona um item ao Cache com uma dependência do SqlCacheDependency objeto. Deve usar o tratamento de exceções 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>
Observações
Em todas as versões suportadas de SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 e SQL Server 2005), a classe SqlCacheDependency monitoriza uma tabela específica de SQL Server base de dados. Quando a tabela muda, os itens associados à tabela são removidos do Cache, e uma nova versão do item é adicionada ao Cache.
A classe SqlCacheDependency também suporta integração com a classe System.Data.SqlClient.SqlDependency ao utilizar uma base de dados SQL Server 2005. O mecanismo de notificação de consulta de SQL Server 2005 deteta alterações nos dados que invalidam os resultados de uma consulta SQL e remove quaisquer itens em cache associados à consulta SQL do System.Web.Caching.Cache.
Pode usar a classe SqlCacheDependency para adicionar itens ao Cache da sua aplicação que dependem de uma tabela de base de dados SQL Server ou de uma consulta SQL ao usar SQL Server 2005. Também pode usar esta classe com a diretiva @ OutputCache para tornar uma página em cache de saída ou um controlo de utilizador dependente de uma tabela de base de dados SQL Server. Finalmente, pode usar a classe SqlCacheDependency com a diretiva @ OutputCache page para tornar uma página em cache de saída dependente dos resultados de uma consulta SQL ao usar SQL Server 2005. A notificação de consulta usando SQL Server 2005 não é suportada na diretiva @ OutputCache para controlos de utilizador.
Note
Para que esta classe funcione corretamente ao usar notificações baseadas em tabelas, a base de dados e quaisquer tabelas das quais queira criar dependências devem ter as notificações ativadas. Pode ativar notificações chamando métodos da SqlCacheDependencyAdmin classe ou usando a aspnet_regsql.exe ferramenta de linha de comandos. Além disso, as definições de configuração adequadas devem ser incluídas no ficheiro Web.config da aplicação.
Usar um objeto SqlCacheDependency com SQL Server notificação de consulta de 2005 não requer qualquer configuração explícita. Consulte a documentação SQL Server para obter informações sobre as restrições aos tipos de consultas Transact-SQL permitidas ao utilizar notificação de consultas.
O exemplo seguinte mostra um ficheiro ASP.NET Web.config que permite dependências baseadas em tabelas numa tabela de base 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
| Name | 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 da chave de cache. |
Propriedades
| Name | Description |
|---|---|
| HasChanged |
Recebe um valor que indica se o CacheDependency objeto mudou. (Herdado de CacheDependency) |
| UtcLastModified |
Obtém a hora em que a dependência foi alterada pela última vez. (Herdado de CacheDependency) |
Métodos
| Name | Description |
|---|---|
| CreateOutputCacheDependency(String) |
Cria uma relação de dependência entre um item armazenado no objeto OutputCache de uma aplicação ASP.NET e uma tabela de base de dados SQL Server. |
| DependencyDispose() |
Liberta os recursos usados pela CacheDependency classe e quaisquer classes que derivem de CacheDependency. (Herdado de CacheDependency) |
| Dispose() |
Liberta os recursos usados pelo CacheDependency objeto. (Herdado de CacheDependency) |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| FinishInit() |
Completa a inicialização do CacheDependency objeto. (Herdado de CacheDependency) |
| GetFileDependencies() |
Obtém as dependências dos ficheiros. (Herdado de CacheDependency) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetUniqueID() |
Recupera um identificador único para um SqlCacheDependency objeto. |
| ItemRemoved() |
Chamada quando uma entrada de cache monitorizada é removida. (Herdado de CacheDependency) |
| KeepDependenciesAlive() |
Atualiza o último tempo de acesso de cada item de cache que depende desse item. (Herdado de CacheDependency) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| NotifyDependencyChanged(Object, EventArgs) |
Notifica o objeto base CacheDependency que a dependência representada por uma classe derivada CacheDependency mudou. (Herdado de CacheDependency) |
| SetCacheDependencyChanged(Action<Object,EventArgs>) |
Adiciona um método Action para lidar com a notificação das partes interessadas sobre alterações a esta dependência. (Herdado de CacheDependency) |
| SetUtcLastModified(DateTime) |
Marca o momento em que uma dependência mudou pela última vez. (Herdado de CacheDependency) |
| TakeOwnership() |
Permite ao primeiro utilizador declarar a propriedade exclusiva desta dependência. (Herdado de CacheDependency) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |