Поделиться через


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, из .

Класс можно использовать для 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)

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

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