SqlCacheDependency [转]

本文介绍ASP.NET中使用SQL缓存依赖机制来提高页面加载效率的方法。包括如何配置web.config,实现基于轮询和通知的缓存失效,以及具体代码示例。
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/archive/2007/08/29/874724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值