SqlCacheDependency Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Устанавливает связь между элементом, хранящимся в объекте Cache приложения ASP.NET, и определенной таблицей базы данных SQL Server или результатами запроса SQL Server 2005. Этот класс не наследуется.
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
- Наследование
Примеры
В следующем примере кода для отображения таблицы базы данных используются SqlDataSource элементы управления и GridView элементы управления. При загрузке страницы страница пытается создать SqlCacheDependency объект. SqlCacheDependency После создания объекта страница добавляет элемент в Cache
объект с зависимостью от SqlCacheDependency объекта. Следует использовать обработку исключений, аналогичную приведенной ниже.
<%@ 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>
Комментарии
Во всех поддерживаемых версиях SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 и SQL Server 2005) SqlCacheDependency класс отслеживает определенную таблицу базы данных SQL Server. При изменении таблицы элементы, связанные с таблицей, удаляются из Cacheтаблицы, а в нее Cacheдобавляется новая версия элемента.
Этот SqlCacheDependency класс также поддерживает интеграцию с System.Data.SqlClient.SqlDependency классом при использовании базы данных SQL Server 2005. Механизм уведомления запроса SQL Server 2005 обнаруживает изменения данных, которые делают недействительными результаты запроса SQL и удаляет из него все кэшированные элементы, связанные с запросом System.Web.Caching.CacheSQL.
Класс можно использовать для SqlCacheDependency добавления элементов в приложениеCache, которые зависят от таблицы базы данных SQL Server или запроса SQL при использовании SQL Server 2005. Этот класс также можно использовать с @ OutputCache
директивой для создания страницы с кэшем выходных данных или пользовательского элемента управления, зависящей от таблицы базы данных SQL Server. Наконец, можно использовать SqlCacheDependency класс с @ OutputCache
директивой страницы, чтобы сделать страницу, кэшированную для вывода, зависящей от результатов запроса SQL при использовании SQL Server 2005. Уведомление о запросе с помощью SQL Server 2005 не поддерживается в директиве @ OutputCache
для пользовательских элементов управления.
Примечание
Для правильной работы этого класса при использовании табличных уведомлений база данных и все таблицы, от которых требуется включить зависимости, должны быть включены уведомления. Вы можете включить уведомления, вызвав методы SqlCacheDependencyAdmin класса или с помощью программы командной aspnet_regsql.exe
строки. Кроме того, необходимые параметры конфигурации должны быть включены в файл Web.config приложения.
Использование объекта с уведомлением SqlCacheDependency запроса SQL Server 2005 не требует явной настройки. Сведения об ограничениях типов запросов Transact-SQL, разрешенных при использовании уведомления о запросах, см. в SQL Server документации.
В следующем примере показан файл ASP.NET Web.config, который включает табличные зависимости в таблице базы данных 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>
Конструкторы
SqlCacheDependency(SqlCommand) |
Инициализирует новый экземпляр класса SqlCacheDependency с помощью указанной SqlCommand для создания зависимости кэш–ключевое поле. |
SqlCacheDependency(String, String) |
Инициализирует новый экземпляр класса SqlCacheDependency с использованием для создания зависимости кэш–ключевое поле указанных параметров. |
Свойства
HasChanged |
Получает значение, указывающее, изменился ли объект CacheDependency. (Унаследовано от CacheDependency) |
UtcLastModified |
Получает время последнего изменения зависимости. (Унаследовано от CacheDependency) |
Методы
CreateOutputCacheDependency(String) |
Создает зависимость между элементом, хранящимся в объекте OutputCache приложения ASP.NET, и таблицей базы данных SQL Server. |
DependencyDispose() |
Освобождает ресурсы, используемые классом CacheDependency и любыми классами, производными от CacheDependency. (Унаследовано от CacheDependency) |
Dispose() |
Освобождает ресурсы, используемые объектом CacheDependency. (Унаследовано от CacheDependency) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
FinishInit() |
Завершает инициализацию объекта CacheDependency. (Унаследовано от CacheDependency) |
GetFileDependencies() |
Возвращает зависимости файлов. (Унаследовано от CacheDependency) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
GetUniqueID() |
Извлекает уникальный идентификатор для объекта SqlCacheDependency. |
ItemRemoved() |
Вызывается при удалении отслеживаемой записи кэша. (Унаследовано от CacheDependency) |
KeepDependenciesAlive() |
Обновляет время последнего обращения к каждому элементу кэша, который зависит от этого элемента. (Унаследовано от CacheDependency) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
NotifyDependencyChanged(Object, EventArgs) |
Уведомляет базовый объект CacheDependency об изменении зависимости, представленной производным классом CacheDependency. (Унаследовано от CacheDependency) |
SetCacheDependencyChanged(Action<Object,EventArgs>) |
Добавляет метод действия для обработки уведомления заинтересованной стороны об изменениях в этой зависимости. (Унаследовано от CacheDependency) |
SetUtcLastModified(DateTime) |
Помечает время последнего изменения зависимости. (Унаследовано от CacheDependency) |
TakeOwnership() |
Позволяет первому пользователю объявлять монопольный доступ к этой зависимости. (Унаследовано от CacheDependency) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |