SqlCacheDependency [转]

SqlCacheDependency
页的Sql缓存
Cahce/SqlCachePage.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="SqlCachePage.aspx.cs"
    Inherits
="Cahce_SqlCachePage" Title="页的Sql缓存" 
%>

<%@ OutputCache Duration="999999" SqlDependency="VS2005_Test:sqlcache" VaryByParam="none" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    
<p>
        Duration="999999" SqlDependency="VS2005_Test:sqlcache" VaryByParam="none"
<br />
        如果是SqlServer2005则改成SqlDependency="CommandNotification
<br />
        注意配置文件中的配置
    
</p>
    
<p>
        
<%=DateTime.Now %>
    
</p>
</asp:Content>

数据源控件的Sql缓存
Cahce/SqlCachePage.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="SqlCacheDataSourceControl.aspx.cs"
    Inherits
="Cahce_SqlCacheDataSourceControl" Title="数据源控件的Sql缓存" 
%>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    
<p>
        DataSource控件设置如下属性:EnableCaching="True" SqlCacheDependency="VS2005_Test:sqlcache"
        CacheDuration="Infinite"
<br />
        如果是SqlServer2005则改成SqlDependency="CommandNotification
<br />
        注意配置文件中的配置
    
</p>
    
<p>
        
<%=DateTime.Now %>
    
</p>
    
<p>
        
<asp:SqlDataSource ID="SqlDataSource1" runat="server" EnableCaching="True" SqlCacheDependency="VS2005_Test:sqlcache"
            CacheDuration
="Infinite" ConnectionString="<%$ ConnectionStrings:SqlConnectionString %>"
            SelectCommand
="SELECT * FROM [SqlCache]"></asp:SqlDataSource>
        
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AllowSorting="True">
        
</asp:GridView>
    
</p>
</asp:Content>

web.config中的相关配置
  <connectionStrings>
    
<add name="SqlConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\VS2005_Test.mdf;Integrated Security=True;User Instance=True"
      providerName
="System.Data.SqlClient" />
  
</connectionStrings>
  
<system.web>
    
<caching>
      
<sqlCacheDependency enabled="true" pollTime="10000">
        
<databases>
          
<add name="VS2005_Test" connectionStringName="SqlConnectionString" />
        
</databases>
      
</sqlCacheDependency>
      
<!-- 如果是SqlServer2005的话,则只需如下设置,因为SqlServer支持基于通知的缓存失效
      <sqlCacheDependency enabled="true" />
      
-->
    
</caching>
  
</system.web>


注意
Sql Server 2005 基于通知的缓存失效,不用aspnet_regsql设置,要设置属性SqlDependency="CommandNotification"。在首次执行某 SQL 查询之前,必须在应用程序某处调用 System.Data.SqlClient.SqlDependency.Start() 方法。此方法应放在 global.asax 文件的 Application_Start() 事件中。因为Sql Server 2005 基于通知的缓存失效对支持查询通知的查询语法有许多限制,所以我觉得最好先别用,而是使用轮询机制。在使用轮询机制时如本例子中的SqlCacheDependency="VS2005_Test:sqlcache",冒号前面是配置文件中配置的相关值指向数据库连接,后面是启用SqlCache的表名,注意区分大小写。
原文地址:https://www.cnblogs.com/RobotTech/p/874724.html