使用 SqlDataSource 控件缓存数据

qlDataSource 控件缓存数据

SqlDataSource 控件可对它检索过的数据进行缓存,这样可以避免再次运行资源消耗量较大的查询,从而提高应用程序的性能。缓存主要用于数据变化不频繁的情况。

此外,当通过 System.Data.SqlClient 提供程序使用 SqlDataSource 控件时,可以使用 SqlCacheDependency 对象。这样可使 SqlDataSource 控件仅在 SelectCommand 返回的数据在数据库中被修改时才刷新缓存。

通过 SqlDataSource 控件启用缓存

SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet 时,该控件可对数据进行缓存。默认情况下并未启用缓存,但可以通过将 EnableCaching 属性设置为 true 来启用缓存。

将基于一个时间间隔对缓存数据进行刷新。可以将 CacheDuration 属性设置为刷新缓存之前要等待的秒数。SqlDataSource 控件为每个 ConnectionStringSelectCommandSelectParameters 值的组合维护一个单独的缓存项。

通过设置 CacheExpirationPolicy 属性,可以进一步控制 SqlDataSource 缓存的行为。Absolute 值会在超过 CacheDuration 值时强制刷新缓存。将 CacheExpirationPolicy 属性设置为 Sliding,则仅在从最后一次访问缓存项起超过 CacheDuration 值之后才对缓存进行刷新。

下面的代码示例演示一个 SqlDataSource 控件,该控件配置为每 20 秒刷新一次数据:

<%@ Page language="C#" %>
<!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>

使用 SqlCacheDependency 对象

SqlDataSource 控件支持基于 SqlCacheDependency 对象的可选过期策略。可以使用 SqlCacheDependency 对象来确保仅在修改了数据库中的源表时才对缓存数据进行刷新。为了使用 SqlCacheDependency 对象,必须为数据库服务器运行 Microsoft SQL Server 通知服务。

如果数据源是 SQL Server 7.0 或更高版本,通过将 SqlDataSource 控件的 SqlCacheDependency 属性设置为由连接字符串和表标识符组成的字符串(形式为“ConnectionString:Table”),可以使用 SqlCacheDependency 对象对数据库进行轮询以检查更改。如果 SqlCacheDependency 涉及多个表,则连接字符串和表名称对以分号分隔,如下面的示例所示:

“ConnectionString1:Table1;ConnectionString2:Table2”。

如果数据源是 Microsoft SQL Server 2005,则还可以选择让 SQL Server 向应用程序通知更改,而不用轮询检查更改。通过将 SqlCacheDependency 属性设置为字符串“CommandNotification”,可以使用该通知模型。有关 SqlCacheDependency 对象的更多信息,请参见使用 SqlCacheDependency 类在 ASP.NET 中缓存

下面的代码示例演示如何创建 Microsoft SQL Server 缓存依赖项,以及如何设置 SqlDataSource 控件的 SqlCacheDependency 属性。在该示例中,每 120 秒对数据库进行一次轮询。如果在这段时间内 Northwind Employees 表中的数据发生更改,则下次对数据库进行轮询时将对由 SqlDataSource 控件缓存和 GridView 控件显示的数据进行刷新。

<%@ Page language="c#" %> <!-- The page uses an example configuration that includes connection strings and a defined SqlCacheDependecy. <?xml version="1.0"?> <configuration>   <connectionStrings>
    <add name="MyNorthwind"          connectionString="Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind""          providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>     <cache>  
     <sqlCacheDependency enabled="true">         <databases>    
       <add             name="Northwind"             connectionStringName="MyNorthwind"             pollTime="120000" />         </databases>       </sqlCacheDependency>     </cache>
  </system.web> </configuration> --> <!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" method="post" runat="server">         <asp:gridview           id="GridView1"           runat="server"           datasourceid="SqlDataSource1" />         <asp:sqldatasource           id="SqlDataSource1"           runat="server"           connectionstring="<%$ ConnectionStrings:MyNorthwind%>"           selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"           enablecaching="True"           cacheduration="300"           cacheexpirationpolicy="Absolute"           sqlcachedependency="Northwind:Employees" />     </form>   </body>
</html>
原文地址:https://www.cnblogs.com/http-www/p/3622035.html