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
Наследование
SqlCacheDependency

Примеры

В следующем примере кода для отображения таблицы базы данных используются 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.

Класс можно использовать для добавления элементов в , зависящих от таблицы базы данных SQL Server или sql-запроса при использовании SQL Server 2005. Этот класс также можно использовать с директивой @ OutputCache, чтобы сделать выходную кэшированную страницу или элемент управления пользователем, зависящий от таблицы базы данных SQL Server. Наконец, можно использовать класс SqlCacheDependency с директивой страницы @ OutputCache, чтобы сделать выходную кэшированную страницу зависящей от результатов SQL-запроса при использовании SQL Server 2005. Уведомление о запросах с помощью SQL Server 2005 не поддерживается в директиве @ OutputCache для пользовательских элементов управления.

Note

Для правильной работы этого класса при использовании табличных уведомлений база данных и все таблицы, от которых требуется включить зависимости, должны быть включены уведомления. Вы можете включить уведомления, вызвав методы SqlCacheDependencyAdmin класса или с помощью средства командной aspnet_regsql.exe строки. Кроме того, необходимые параметры конфигурации должны быть включены в файл Web.config приложения.

Использование объекта SqlCacheDependency с уведомлением запроса SQL Server 2005 не требует явной настройки. Ознакомьтесь с документацией по SQL Server для получения сведений об ограничениях типов запросов Transact-SQL, которые разрешены при использовании уведомления о запросах.

В следующем примере показан файл 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)

Инициализирует новый экземпляр класса, используя предоставленный SqlCommand для создания зависимости ключей SqlCacheDependency кэша.

SqlCacheDependency(String, String)

Инициализирует новый экземпляр SqlCacheDependency класса, используя предоставленные параметры для создания зависимости кэш-ключа.

Свойства

Имя Описание
HasChanged

Возвращает значение, указывающее, изменился ли CacheDependency объект.

(Унаследовано от CacheDependency)
UtcLastModified

Возвращает время последнего изменения зависимости.

(Унаследовано от CacheDependency)

Методы

Имя Описание
CreateOutputCacheDependency(String)

Создает связь зависимостей между элементом, хранящимся в объекте ASP.NET OutputCache приложения, и таблицей базы данных 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>)

Добавляет метод Action для обработки уведомления заинтересованных лиц об изменениях этой зависимости.

(Унаследовано от CacheDependency)
SetUtcLastModified(DateTime)

Помечает время последнего изменения зависимости.

(Унаследовано от CacheDependency)
TakeOwnership()

Позволяет первому пользователю объявить монопольную собственность этой зависимости.

(Унаследовано от CacheDependency)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел