当前位置:中国站长下载文章中心网页编程.NET编程 → ASP.NET 2.0 中改进的缓存功能

ASP.NET 2.0 中改进的缓存功能

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 9:55:54

  
  注意:Microsoft SQL Server 2005 支持一种截然不同的 SQL Cache Invalidation 方法。您可以配置 SQL Server 2005,使其在数据库、数据库表或数据库行发生变化时通知 ASP.NET 应用程序。这样,ASP.NET Framework 就不需要通过不断轮询 SQL Server 2005 数据库来检查数据更改了。
  
  需要注意的是,SQL Cache Invalidation 只能用于 Microsoft SQL Server 7 及更高版本,不能用于其他数据库,例如 Microsoft Access 或 Oracle。
  
  在缓存整个页面的输出、使用 DataSource控件或直接使用 Cache 对象时,都可以使用 SQL Cache Invalidation。下面将分别介绍这三种情况。
  
  配置 SQL Cache Invalidation
  在 Web 应用程序中使用 SQL Cache Invalidation 之前,首先必须执行一些配置步骤。必须将 Microsoft SQL Server 配置为支持 SQL Cache Invalidation,还必须在应用程序的 Web 配置文件中添加必要的配置信息。
  
  可以按照以下两种方法配置 SQL Server:使用 aspnet_regsql 命令行工具,或者使用 SqlCacheDependencyAdmin 类。
  
  使用 ASPNET_REQSQL 启用 SQL Cache Invalidation
  使用 aspnet_regsql 工具,您可以通过命令行来配置 SQL Cache Invalidation。aspnet_regsql 工具位于 Windows\Microsoft.NET\Framework\[版本] 文件夹中。要使用此工具,必须打开命令提示符窗口并浏览到此文件夹。
  
  要在使用 Pubs 数据库时支持 SQL Cache Invalidation,需要执行以下命令。
  
  aspnet_regsql -E -d Pubs -ed
  
  -E 选项使 aspnet_regsql 工具在连接到数据库服务器时使用集成的安全设置。-d 选项用于选择 Pubs 数据库。最后,-ed 选项用于为数据库启用 SQL Cache Invalidation。
  
  执行此命令时,将在数据库中添加一个名为 AspNet_SqlCacheTablesForChangeNotification 的新数据库表。此表包含启用了 SQL Cache Invalidation 的所有数据库表的列表。此命令还将在数据库中添加一组存储过程。
  
  为数据库启用 SQL Cache Invalidation 后,必须从数据库中选择要启用 SQL Cache Invalidation 的特定表。以下命令将为 Titles 数据库表启用 SQL Cache Invalidation。
  
  aspnet_regsql -E -d Pubs -t Titles -et
  
  -t 选项用于选择数据库表。-et 选项为数据库表启用 SQL Cache Invalidation。当然,您可以通过对每个数据库表重复执行此命令,为多个表启用 SQL Cache Invalidation。
  
  执行此命令时,将在数据库表中添加一个触发器。只要您对表进行了修改,此触发器就将触发并更新 AspNet_SqlCacheTablesForChangeNotification 表。
  
  最后,要获取某个特定数据库中当前启用了 SQL Cache Invalidation 的表的列表,可以使用以下命令。
  
  aspnet_regsql -E -d Pubs -lt
  
  此方法将从 AspNet_SqlCacheTablesForChangeNotification 中选择表的列表。此外,您也可以通过直接在该数据库表中执行查询来检索此信息。
  
  使用 SqlCacheDependencyAdmin 类
  aspnet_regsql 工具在后台使用 SqlCacheDependencyAdmin 类的方法来配置 Microsoft SQL Server。如果您愿意,可以直接从 ASP.NET 页面中使用此类的方法。
  
  SqlCacheDependencyAdmin 类具有五个重要的方法:
  
  • DisableNotifications — 为特定数据库禁用 SQL Cache Invalidation。
  
  • DisableTableForNotifications — 为数据库中的特定表禁用 SQL Cache Invalidation。
  
  • EnableNotifications — 为特定数据库启用 SQL Cache Invalidation。
  
  • EnableTableForNotifications — 为数据库中的特定表启用 SQL Cache Invalidation。
  
  • GetTablesEnabledForNotifications — 返回启用了 SQL Cache Invalidation 的所有表的列表。
  
  
  例如,使用列表 2 中的 ASP.NET 页面,您可以为 Pubs 数据库中的任何表配置 SQL Cache Invalidation(参见图 2)。
  
  图 2:从 ASP.NET 页面中启用 SQL Cache Invalidation
  
  
  列表 2:EnableSCI.aspx (C#)
  
  <%@ Page Language="c#" %>
  <%@ Import Namespace="System.Web.Caching" %>
  <script runat="server">
  
  const string connectionString = "Server=localhost;Database=Pubs";
  
  void Page_Load()
   {
  if (!IsPostBack)
   {
  SqlCacheDependencyAdmin.EnableNotifications(
  connectionString);
  SqlDataSource1.SelectParameters.Add("connectionString",
  connectionString);
   }
   }
  
  void EnableTable(Object s, EventArgs e)
   {
  try
   {
  SqlCacheDependencyAdmin.EnableTableForNotifications(
  connectionString, txtTableName.Text);
   }
  catch (Exception ex)
   {
  lblErrorMessage.Text = ex.Message;
   }
  txtTableName.Text = "";
   }
  
  </script>
  
  <html>
  <head runat="server">
  <title>Enable SQL Cache Invalidation</title>
  </head>
  <body>
  <form id="form1" runat="server">
  
  <h1>SQL Cache Invalidation</h1>
  
  以下表格已启用 SQL Cache Invalidation:
  
  <p>
  <asp:GridView id="grdTables"
  DataSourceID="SqlDataSource1" CellPadding="10"
  ShowHeader="false" Runat="Server" />
  </p>
  
  <asp:ObjectDataSource
  ID="SqlDataSource1"
  TypeName="System.Web.Caching.SqlCacheDependencyAdmin"
  SelectMethod="GetTablesEnabledForNotifications"
  Runat="Server" />
  <p>
  <asp:Label ID="lblErrorMessage" EnableViewState="false"
  ForeColor="red" Runat="Server" />
  </p>
  
  <asp:TextBox ID="txtTableName" Runat="Server" />
  <asp:Button Text="Enable Table"
  Runat="Server" />
  
  </form>
  </body>
  </html>
  
  列表 2:EnableSCI.aspx (Visual Basic .NET)
  
  <%@ Page Language="vb" %>
  <%@ Import Namespace="System.Web.Caching" %>
  <script runat="server">
  
  Const connectionString As String = "Server=localhost;Database=Pubs"
  
  Sub Page_Load()
  
  If Not IsPostBack Then
  SqlCacheDependencyAdmin.EnableNotifications( _
  connectionString)
  SqlDataSource1.SelectParameters.Add("connectionString", _
  connectionString)
  End If
  End Sub
  
  Sub EnableTable(ByVal s As Object, ByVal e As EventArgs)
  
  Try
  
  SqlCacheDependencyAdmin.EnableTableForNotifications( _
  connectionString, txtTableName.Text)
  Catch ex As Exception
  lblErrorMessage.Text = ex.Message
  End Try
  txtTableName.Text = ""
  End Sub
  
  </script>
  
  <html>
  <hea

上一页  [1] [2] [3] [4] [5]  下一页