ASP.NET 下SQLServer2005 缓存依赖

摘自:http://www.cnblogs.com/xiaogangqq123/archive/2010/04/29/1723551.html

            http://www.cnblogs.com/21dacia/articles/1614455.html

            http://www.cnblogs.com/seerlin/archive/2008/12/19/1358128.html


使用推依赖的查询类型有诸多限制。下面是比较显著的一些限制。

l    查询必须使用两部分的表名(例如,dbo.Movies而不是Movies)。

l    查询必须包含一个显式的列名列表(不能使用*)。

l    查询不能引用视图、继承表、临时表或表变量。

l    查询不能引用大对象类型,如Text、NText和Image列。

l    查询不能包含子查询、外联结或子联结。

l    查询不能使用DISTINCT、COMPUTE、COMPUTE BY或者INSERT关键字。

l    查询不能使用许多聚合函数,包括AVG、COUNT(*)、MAX和MIN。

这里只是一个不完整的查询限制的列表。要查看完整的列表,可以参考SQL Server 2005在线图书或MSDN网站(msdn.microsoft.com)的“创建一个通知查询”的主题。


ASP.NET 下SQLServer2005 缓存依赖

参考了网上得博客写的缓存依赖..感觉不错.今天测试了下.在此记录一下:

SqlSrever2005 内置了缓存依赖功能,这篇文章主要介绍 Sql2005下的缓存依赖,Sql2000

数据库由于使用的较少,暂不做介绍..

1 首先开启数据库的缓存依赖功能:

aspnet_regsql -S <server> -U sa -P sa -d <database> -ed      启动数据库的数据缓存依赖功能

   aspnet_regsql -S <server> -U sa -P sa -d <database> -t <table> -et      启动数据表的数据缓存依赖功能

2 检测是否启用了Service Broker

Select DATABASEpRoPERTYEX(‘数据库名称’,'IsBrokerEnabled')

        ---1 表示启用,0表示没启用

启用Service Broker

ALTER DATABASE 数据库名称 SET ENABLE_BROKER;  

3 然后需要在Global.asax 文件了里显式的启动接受依赖项更改通知的侦听器

//connectionString 为数据库连接字符串

//Application_Start 事件

System.Data.SqlClient.SqlDependency.Start(connectionString);

//Application_End 事件

System.Data.SqlClient.SqlDependency.Stop(connectionString); 

4  应用程序数据缓存中使用

          SqlCommand command = new SqlCommand(sql, conn);

          SqlCacheDependency scd = new SqlCacheDependency(command);

          HttpContext.Current.Cache.Insert("缓存的键值", scd, null);

OK,大功告成..

另外还需要配置WebConfig:

<connectionStrings>
   <add name="testCache" connectionString="data source = .;initial catalog = TestDb;user id = sa ;password =sasasa " providerName="System.Data.SqlClient"/>
</connectionStrings>

<system.web>

<caching>
     <sqlCacheDependency enabled="true" pollTime="1000">
       <databases>
         <add name="abico" connectionStringName="testCache"/>
       </databases>
     </sqlCacheDependency>
   </caching>

</system.web>

pollTime是缓存的事件 以秒为单位。

附:

Service Broker 是SqlServer 里的消息队列,具体的可以参考:

http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx


摘自:http://www.cnblogs.com/seerlin/archive/2008/12/19/1358128.html

SQL 缓存依赖

作用

使用SQL 缓存依赖技术,可以实现当应用程序中对应的数据库中的数据发生改变时

才清除应用程序中对应的缓存,最大化的提高程序的性能。

实现方法:

 

一、创建数据库

a)         数据库不能为动态附加的模式

b)        启用数据库中的消息传送功能

alter database CacheDependencyTest set enable_broker

“CacheDependencyTest”为自己建的数据库

二、在应用程序中合使用SQL 缓存依赖技术

a)         建立一个Global.asax文件,在其中的“Application_Start”方法添加下面代码:

//当程序运行时启动sql缓存依赖监听

            string connString = ConfigurationManager.ConnectionStrings["CacheDependencyTestConnectionString"].ConnectionString;

            SqlDependency.Start(connString);

 

 

b)        在要使用缓存的页面中使用缓存依赖

 

        protected void Page_Load(object sender, EventArgs e)

        {

            //select  语句必须包含确切的列名,表名也要加上所属用户名,

            //例如下面dbo.CacheTable表的dbo就不能略去

            string sql = "SELECT UserName FROM dbo.CacheTable";

 

            string connstring=ConfigurationManager

                .ConnectionStrings["CacheDependencyTestConnectionString"]

                .ConnectionString;

            SqlConnection conn=new SqlConnection(connstring);

            SqlDataAdapter da = new SqlDataAdapter(sql, conn);

             DataTable dt = new DataTable();

             // 创建一个SQL缓存依赖,要用一个selectCommand做为参数

                System.Web.Caching.SqlCacheDependency denpendency

                    = new System.Web.Caching.SqlCacheDependency(da.SelectCommand);

               

            //将数据库中的数据填到dt中,要创建完缓存依赖后才可以填数据

                da.Fill(dt);

 

            //如果缓存中没有dt这个表,就将表dt添加缓存中

            if (Cache["CacheTable"] == null) {             

                Cache.Insert(

                    "CacheTable"//缓存名

                    , dt//要缓存的对象,这里是一个DataTable

                    , denpendency//sql缓存依赖对象

                    //缓存过期时间,这里设置为永不过期.

                    //所以会一直到数据库中的表数据发生更改时才会清除缓存

                    ,System.Web.Caching.Cache.NoAbsoluteExpiration

                    //滑动时间,这里设置为0;

                    //如果设置为5,代表如果你5秒钟内没有发请求,就从缓存中清除

                    , TimeSpan.Zero

                    );

                //测试用的,这样在界面才知道数据是不是从缓存读取

                this.lblFlag.Text = "out of cache"+DateTime.Now.ToString();

            }

            else

            {

                this.lblFlag.Text = "use cache" + DateTime.Now.ToString();

            }                 

             //重缓存中读取数据

            this.GridView1.DataSource = Cache["CacheTable"] as DataTable;

            this.GridView1.DataBind();           

        }

 

 

 

c)        页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AppCache.aspx.cs" Inherits="cacheTest.AppCache" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="lblFlag" runat="server"></asp:Label>

        <asp:GridView ID="GridView1" runat="server">

        </asp:GridView>

       

    </div>

    </form>

</body>

</html>

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值