演练:将 ASP.NET 输出缓存与 SQL Server 结合使用

更新:2007 年 11 月

此演练演示如何缓存依赖于 SQL Server 数据库中数据的 ASP.NET 页。

ASP.NET 输出缓存的一项高级功能是 SQL 缓存依赖项。SQL 缓存依赖项使您可以缓存依赖于 SQL Server 表中数据的页。您可以配置 SQL Server 和 ASP.NET 以缓存页请求,降低服务器工作负荷,直到页所依赖的数据已在 SQL Server 中更新为止。对于相对保持静态的产品目录或客户注册信息等数据而言,SQL 缓存依赖项很有用。

本演练中阐释的任务包括:

  • 创建并配置页,以显示 Northwind 数据库中的数据。

  • 为 SQL 缓存通知启用数据库。

  • 在页以及 Web.config 文件中指定 SQL 缓存依赖项。

  • 对 Northwind 数据库进行更改并查看缓存行为。

先决条件

若要完成本演练,您需要:

  • 对具有 Northwind 数据库的 SQL Server 2000 或 SQL Server 2005 的访问。

  • SQL Server Northwind 数据库的访问权限。有关下载和安装 SQL Server 示例数据库 Northwind 的信息,请参见位于 Microsoft SQL Server 网站上的“Installing Sample Databases”(安装示例数据库)

    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    如果需要有关如何登录到运行 SQL Server 的计算机的信息,请与服务器管理员联系。

  • Microsoft 数据访问组件 (MDAC) 2.7 版或更高版本。

    如果您使用的是 Windows XP 或 Windows Server 2003,那么您已经有了 MDAC 2.7。但是,如果使用 Windows 2000,您可能需要升级您计算机上已经安装的 MDAC。有关更多信息,请参见 MSDN 文章“MDAC Installation”(MDAC 安装)

  • .NET Framework 2.0 版。

创建网站

如果您已在 Visual Web Developer 中创建了网站(请参见 演练:在 Visual Web Developer 中创建基本网页),则可以使用该网站并转至本演练的后面部分“为 SQL Server 启用缓存通知”。否则,按照下面的步骤创建一个新的网站和网页。

创建文件系统网站

  1. 打开 Visual Web Developer。

  2. 在**“文件”菜单上单击“新建网站”。(在 Visual Web Developer 速成版中,在“文件”菜单上单击“新建”,然后单击“网站”**。)

    出现**“新建网站”**对话框。

  3. 在**“Visual Studio 已安装的模板”之下单击“ASP.NET 网站”**。

  4. 在**“位置”**框中输入要保存网站页面的文件夹的名称。

    例如,键入文件夹名 C:\WebSites。

  5. 在**“语言”**列表中,单击您想使用的编程语言。

  6. 单击**“确定”**。

    Visual Web Developer 创建该文件夹和一个名为 Default.aspx 的新页。

为 SQL Server 启用缓存通知

必须配置 SQL Server 以就依赖数据中的更改向 ASP.NET 提供合适的通知。您需要具有管理特权才能配置服务器。

为 SQL Server 启用缓存通知

  1. 在 Windows**“启动”菜单中,指向“所有程序”,指向“附件”,然后单击“命令提示符”**以打开命令提示窗口。

  2. 在磁盘驱动器中找到 Aspnet_regsql.exe 可执行文件。此文件随 .NET Framework 2.0 版安装在下面的位置:

    %windir%\Microsoft.NET\Framework\FrameworkVersion
    

    确保 %windir% 表示 Windows 目录并且 .NET Framework 版本为 2.0 或更高版本。该路径可能看起来类似于下面这样:

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.40217
    
  3. 使用下面的命令为 Northwind 数据库中的 Employees 表启用缓存通知:

    aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
    
    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    您需要具有管理特权,或管理帐户和密码。如果没有此信息,请与数据库管理员联系。

    将出现一条消息,指示启用数据库的成功与失败。下面的消息指示成功:

    Enabling the table for SQL cache dependency.
    ..
    Finished.
    

向项目中添加数据连接

要在 Visual Web Developer 中使用 SQL Server 数据库,您需要向 Northwind 数据库添加连接。

向项目添加数据源

  1. 在**“服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”)中,右击“数据连接”,然后单击“添加连接”**。

    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    “服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”)通常停靠在解决方案资源管理器后面。

    如果**“服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”)不可见,则在“视图”菜单中单击“服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”**)。

  2. 如果显示**“选择数据源”**对话框,则执行以下操作:

    1. 在**“数据源”列表中,单击“Microsoft SQL Server”**。

    2. 在**“数据提供程序”列表中,单击“用于 SQL Server 的 .NET Framework 数据提供程序”**。

    3. 单击**“继续”**。

  3. 在**“添加连接”**对话框中,为数据库提供详细信息(服务器名称、登录凭据等),然后选择 Northwind 数据库。

  4. 单击**“确定”**。

向网页添加时间戳和数据

现在可以创建网页来演示缓存处理。在本节中,您将添加一个时间戳来跟踪页创建时间,并添加一个 GridView 控件来查看 Northwind 数据库的 Employees 表。

向网页添加时间戳和数据

  1. 切换到或打开 Default.aspx 页。

  2. 切换到“设计”视图。

  3. 从工具箱的**“标准”**组中,将一个 Label 控件拖到页上,保留默认名称 Label1。

  4. 在**“服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”)中,展开“数据连接”**。

  5. 为以前创建的数据连接展开节点。

  6. 展开**“表”**节点。

  7. 将 Employees 表拖到页上。

    Visual Web Designer 创建一个 GridView 控件,它配置为使用您所选择的连接和表。

  8. 在**“GridView 任务”菜单上,单击“配置数据源**。

    默认数据连接字符串名称 NorthwindConnectionString1 出现在“配置数据源”向导的第一个步骤中。

  9. 单击**“下一步”**。

  10. 在**“配置 Select 语句”窗格中,选择“指定来自表或视图的列”**。

  11. 在**“名称”**列表中,单击 Employees。

  12. 在**“列”**列表中,选择 EmployeeID、LastName 和 FirstName 列。

  13. 单击**“下一步”**。

  14. 单击**“完成”**。

    Visual Web Designer 配置 GridView 控件以显示您所选择的数据。

    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    如果看到一条消息询问您是否要刷新 GridView 控件的字段和键,单击“是”

  15. 双击页的空白部分。

    设计器生成 Page_Load 方法并切换视图。

  16. 添加以下突出显示的代码,以显示指示页创建的时间戳:

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) _
            Handles Me.Load
         Label1.Text = System.DateTime.Now
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  17. 保存该文件。

测试不使用缓存功能的页

现在可以运行页,并观察不使用缓存功能的行为。此时将加载页并显示当前服务器时间,然后将检索数据并将其放置在页中。

测试不使用缓存功能的页

  1. 按 Ctrl+F5 运行该页。

  2. 在浏览器中刷新页

    注意,时间戳随着每次页刷新而更改。数据将保持相同。

为缓存功能配置网页

在本部分演练中,您将基于 Northwind 数据库的 Employees 表为 SQL 缓存依赖项配置页。

为缓存功能配置网页

  1. 切换到“源”视图。

  2. 在页顶部,添加下面的指令以指示依赖项:

    <%@ OutputCache Duration="3600" SqlDependency="Northwind:Employees" VaryByParam="none" %>
    

VaryByParam 属性指示缓存时 ASP.NET 是否应考虑页参数(如查询字符串或发布值)。当 VaryByParam 设置为 none 时,将不考虑任何参数;无论提供什么附加参数,都将向所有用户发送相同的页。将 VaryByParam 设置为 *(星号)表明,对于每个唯一的请求参数组合,将缓存一个唯一页。但是,将 VaryByParam 设置为 * 会缓存页的许多不同版本,所以如果您知道缓存变化所依据的参数,建议您在 VaryByParam 属性中显式指定这些参数。有关详细信息,请参见 缓存页的多个版本

在 Web.config 文件中设置缓存配置

除了前面部分中网页的 OutputCache 声明外,您需要在 Web.config 文件中指定缓存详细信息。

创建和更新 Web.config 文件

  1. 如果您的网站已具有 Web.config 文件,请转至步骤 4。

  2. 在解决方案资源管理器中,右击网站的名称,然后单击**“添加新项”**。

  3. 在**“添加项”对话框中,单击“Web 配置文件”,然后单击“添加”**。

    请确保使用名称 Web.config。

  4. 将下面的 XML 作为 system.web 元素的子级添加到 Web.config 文件中:

    <!-- caching section group -->
    <caching>
      <sqlCacheDependency enabled = "true" pollTime = "1000" >
        <databases>
          <add name="Northwind" 
             connectionStringName="NorthwindConnectionString1"
             pollTime = "1000"
          />
        </databases>
      </sqlCacheDependency>
    </caching>
    
    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    前面您在创建数据连接时,已建立了连接字符串名称 NorthwindConnectionString1。如果您的连接字符串具有不同的名称,请替换为该名称。

    e3w8402y.alert_note(zh-cn,VS.90).gif说明:

    在连接字符串中指定的帐户凭据必须具有足够的特权来轮询数据库。

  5. 保存文件,然后将其关闭。

测试使用缓存功能的页

启用缓存后,刷新页时将不再导致时间戳或数据库查询更新,因为 ASP.NET 将从缓存中满足页请求。

测试使用缓存功能的页

  • 按 Ctrl+F5 运行该页。

    注意,时间戳在每次页刷新时保持不变。将从缓存中检索页。

更改数据

现在可以更改数据库中的数据,并可看到缓存被验证,并创建了一个新页。

更改数据

  1. 在**“服务器资源管理器”(Visual Web Developer 速成版中为“数据库资源管理器”中),展开“数据连接”**节点。

  2. 展开您先前创建的连接。

  3. 展开**“表”**节点。

  4. 右击**“Employees”,然后单击“显示表数据”**。

  5. 通过编辑数据表中的任何字段并确保它是网页所显示的字段来更新数据库。

    或者也可以使用 SQL 窗格(如果 SQL 窗格不可见,则在**“查询设计器”菜单中单击“窗格”,然后单击“SQL”)。直接输入 SQL 命令,然后单击“查询设计器”**工具栏中的“执行 SQL”按钮。例如,运行下面的命令:

    UPDATE dbo.Employees SET LastName = 'Doe' WHERE (EmployeeID = 5)
    

    这将把雇员 5 的名称更改为 Doe。

  6. 关闭数据的视图。

测试 SQL 缓存依赖项

现在可以测试页,以查看数据和时间戳是否已更改。

测试 SQL 缓存依赖项

  1. 按 Ctrl+F5 运行该页。

    注意,时间戳已更改,并显示新数据。

  2. 按 Ctrl+F5 再次运行该页。

    这次时间戳保持不变,因为数据未更改,并且现在正从缓存中再次检索该页。

后续步骤

也可以使用其他参数来缓存页。有关信息,请参见 演练:使用输出缓存增强网站性能。如果您不熟悉数据访问,请参见 演练:网页中的基本数据访问

请参见

概念

使用 SqlCacheDependency 类在 ASP.NET 中缓存

参考

DefaultHttpCachePolicy

OutputCacheSettingsSection