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

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

内容包括:

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

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

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

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

首先创建文件系统网站(这里就不多说了)

为 SQL Server 启用缓存通知

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

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

如:C:\WINDOWS\Microsoft.NET\Framework\v2.0.40217

使用下面的命令为 Northwind 数据库中的 Employees 表启用缓存通知:

aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees

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

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

Enabling the table for SQL cache dependency.

..

Finished.

向项目中添加数据连接

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

向项目添加数据源

在“服务器资源管理器中,右击“数据连接”,然后单击“添加连接”。

配置数据源然后选择 Northwind 数据库。

向网页添加时间戳和数据

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

步骤:

切换到或打开 Default.aspx 页。

切换到“设计”视图。

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

在“服务器资源管理器中,展开“数据连接”。

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

展开“表”节点。

将 Employees 表拖到页上。

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

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

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

单击“下一步”。

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

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

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

单击“下一步”。

单击“完成”。

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

注意

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

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

protected void Page_Load(Object sender, System.EventArgs e)

{

Label1.Text = System.DateTime.Now.ToString();

}

测试不使用缓存功能的页

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

测试不使用缓存功能的页

按 Ctrl+F5 运行该页。

在浏览器中刷新页

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

为缓存功能配置网页

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

为缓存功能配置网页在页顶部,添加下面的指令以指示依赖项:

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

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

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

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

将下面的 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>

注意

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

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

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

测试使用缓存功能的页

按 Ctrl+F5 运行该页。

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

更改数据来查看缓存验证

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

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

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

按 Ctrl+F5 运行该页。

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

按 Ctrl+F5 再次运行该页。

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