SqlDataSource 控件可对它检索过的数据进行缓存,这样可以避免再次运行资源消耗量较大的查询,从而提高应用程序的性能。缓存主要用于数据变化不频繁的情况。
此外,当通过 System.Data.SqlClient 提供程序使用 SqlDataSource 控件时,可以使用 SqlCacheDependency 对象。这样可使 SqlDataSource 控件仅在 SelectCommand 返回的数据在数据库中被修改时才刷新缓存。
通过 SqlDataSource 控件启用缓存
当 SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet 时,该控件可对数据进行缓存。默认情况下并未启用缓存,但可以通过将 EnableCaching 属性设置为 true 来启用缓存。
将基于一个时间间隔对缓存数据进行刷新。可以将 CacheDuration 属性设置为刷新缓存之前要等待的秒数。SqlDataSource 控件为每个 ConnectionString、SelectCommand 和 SelectParameters 值的组合维护一个单独的缓存项。
通过设置 CacheExpirationPolicy 属性,可以进一步控制 SqlDataSource 缓存的行为。Absolute 值会在超过 CacheDuration 值时强制刷新缓存。将 CacheExpirationPolicy 属性设置为 Sliding,则仅在从最后一次访问缓存项起超过 CacheDuration 值之后才对缓存进行刷新。
下面的代码示例演示一个 SqlDataSource 控件,该控件配置为每 20 秒刷新一次数据:
Visual Basic
复制代码
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
EnableCaching="True"
CacheDuration="20"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataSourceID="SqlDataSource1">
<columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</columns>
</asp:GridView>
</form>
</body>
</html>
C#