控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

SQL 缓存依赖

作者:佚名 出处:互联网 2012年02月13日 阅读:

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>
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统