SqlCacheDependency Класс

Определение

Устанавливает связь между элементом, хранящимся в объекте Cache приложения ASP.NET, и определенной таблицей базы данных SQL Server или результатами запроса SQL Server 2005.Establishes a relationship between an item stored in an ASP.NET application's Cache object and either a specific SQL Server database table or the results of a SQL Server 2005 query. Этот класс не наследуется.This class cannot be inherited.

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 для вывода таблицы базы данных.The following code example uses the SqlDataSource and GridView controls to display a database table. При загрузке страницы страница пытается создать объект SqlCacheDependency.When the page is loaded, the page attempts to create a SqlCacheDependency object. После создания объекта SqlCacheDependency на странице добавляется элемент в Cache с зависимостью от объекта SqlCacheDependency.After the SqlCacheDependency object is created, the page adds an item to the Cache with a dependency on the SqlCacheDependency object. Следует использовать обработку исключений, аналогичную показанной здесь.You should use exception handling similar to that shown here.

<%@ 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 таблицей базы данных.On all supported versions of SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000, and SQL Server 2005) the SqlCacheDependency class monitors a specific SQL Server database table. При изменении таблицы элементы, связанные с таблицей, удаляются из Cache, а в Cacheдобавляется новая версия элемента.When the table changes, items associated with the table are removed from the Cache, and a new version of the item is added to the Cache.

Класс SqlCacheDependency также поддерживает интеграцию с классом System.Data.SqlClient.SqlDependency при использовании базы данных SQL Server 2005SQL Server 2005.The SqlCacheDependency class also supports integration with the System.Data.SqlClient.SqlDependency class when using a SQL Server 2005SQL Server 2005 database. Механизм уведомления о запросах SQL Server 2005SQL Server 2005 обнаруживает изменения данных, которые делают результаты запроса SQL недействительными, и удаляет все кэшированные элементы, связанные с запросом SQL, из System.Web.Caching.Cache.The query notification mechanism of SQL Server 2005SQL Server 2005 detects changes to data that invalidate the results of an SQL query and removes any cached items associated with the SQL query from the System.Web.Caching.Cache.

Класс SqlCacheDependency можно использовать для добавления элементов в Cache приложения, которые зависят от таблицы SQL Server базы данных или SQL-запроса при использовании SQL Server 2005SQL Server 2005.You can use the SqlCacheDependency class to add items to your application's Cache that are dependent on either a SQL Server database table or on an SQL query when using SQL Server 2005SQL Server 2005. Этот класс также можно использовать с директивой, чтобы сделать страницу с кэшированием выходных данных или пользовательский элемент управления зависимым от SQL Server таблицы базы данных.You can also use this class with the directive to make an output-cached page or a user control dependent on a SQL Server database table. Наконец, можно использовать класс SqlCacheDependency с директивой Page для того, чтобы страница, кэшированная в выходных данных, зависела от результатов SQL-запроса при использовании SQL Server 2005SQL Server 2005.Finally, you can use the SqlCacheDependency class with the page directive to make an output-cached page dependent on the results of an SQL query when using SQL Server 2005SQL Server 2005. Уведомление о запросе с использованием SQL Server 2005SQL Server 2005 не поддерживается директивой для пользовательских элементов управления.Query notification using SQL Server 2005SQL Server 2005 is not supported on the directive for user controls.

Примечание

Чтобы этот класс работал правильно при использовании уведомлений на основе таблиц, база данных и все таблицы, для которых необходимо установить зависимости, должны иметь включенные уведомления.For this class to work correctly when using table-based notifications, the database and any tables that you want to make dependencies on must have notifications enabled. Уведомления можно включить путем вызова методов класса SqlCacheDependencyAdmin или с помощью программы командной строки.You can enable notifications by calling methods of the SqlCacheDependencyAdmin class or by using the command-line tool. Кроме того, в файл Web. config приложения должны быть добавлены правильные параметры конфигурации.In addition, the proper configuration settings must be included in the application's Web.config file.

Использование объекта SqlCacheDependency с SQL Server 2005SQL Server 2005 уведомления о запросе не требует какой-либо явной настройки.Using a SqlCacheDependency object with SQL Server 2005SQL Server 2005 query notification does not require any explicit configuration. Дополнительные сведения об ограничениях для типов запросов Transact-SQL, разрешенных при использовании уведомлений о запросах, см. в электронной документации по SQL Server 2005SQL Server 2005.Consult the SQL Server 2005SQL Server 2005 Books Online for information about restrictions on the types of Transact-SQL queries that are allowed when using query notification.

В следующем примере показан файл Web. config ASP.NET, который включает зависимости на основе таблиц для таблицы базы данных SQL Server.The following example shows an ASP.NET Web.config file that enables table-based dependencies on a SQL Server database table.

<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 для создания зависимости кэш–ключевое поле.Initializes a new instance of the SqlCacheDependency class, using the supplied SqlCommand to create a cache-key dependency.

SqlCacheDependency(String, String)

Инициализирует новый экземпляр класса SqlCacheDependency с использованием для создания зависимости кэш–ключевое поле указанных параметров.Initializes a new instance of the SqlCacheDependency class, using the supplied parameters to create a cache-key dependency.

Свойства

HasChanged

Получает значение, указывающее, изменился ли объект CacheDependency.Gets a value indicating whether the CacheDependency object has changed.

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

Получает время последнего изменения зависимости.Gets the time when the dependency was last changed.

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

Методы

CreateOutputCacheDependency(String)

Создает зависимость между элементом, хранящимся в объекте OutputCache приложения ASP.NET, и таблицей базы данных SQL Server.Creates a dependency relationship between an item that is stored in an ASP.NET application's OutputCache object and a SQL Server database table.

Dispose()

Освобождает ресурсы, используемые объектом CacheDependency.Releases the resources used by the CacheDependency object.

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

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

Возвращает зависимости файлов.Gets the file dependencies.

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

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

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

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

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

Извлекает уникальный идентификатор для объекта SqlCacheDependency.Retrieves a unique identifier for a SqlCacheDependency object.

ItemRemoved()

Вызывается при удалении отслеживаемой записи кэша.Called when a monitored cache entry is removed.

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

Обновляет время последнего обращения к каждому элементу кэша, который зависит от этого элемента.Updates the last access time of every cache item that depends on this item.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
SetCacheDependencyChanged(Action<Object,EventArgs>)

Добавляет метод действия для обработки уведомления заинтересованной стороны об изменениях в этой зависимости.Adds an Action method to handle notifying interested party in changes to this dependency.

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

Позволяет первому пользователю объявлять монопольный доступ к этой зависимости.Allows the first user to declare exclusive ownership of this dependency.

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

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

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

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

Дополнительно