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-запроса, и удаляет все кэшированные элементы, связанные с SQL-запросом System.Web.Caching.Cache, из .
Класс можно использовать для SqlCacheDependency добавления элементов в приложения Cache , которые зависят от таблицы базы данных SQL Server или sql-запроса при использовании SQL Server 2005. Этот класс также можно использовать с директивой , @ OutputCache
чтобы сделать кэшированную страницу вывода или пользовательский элемент управления зависимым от таблицы базы данных SQL Server. Наконец, можно использовать SqlCacheDependency класс с директивой @ OutputCache
page, чтобы сделать кэшированную страницу выходных данных зависимой от результатов 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) |