SQL Server2005 实现数据库缓存依赖的实现步骤整理

    SQL SERVER 2005内置支持SQL数据缓存依赖,内置通知传递服务,能够提供更小粒度的数据更改监测,使用和配置简单。使用方法和步骤如下:

    step1 检测是否已经启用Service Broker,检测方法:

        Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')    -- 1 表示已经启用 0 表示没有启用

    step2  如果Service Broker没有启用,使用下面语句启用:

        ALTER DATABASE 数据库名称 SET ENABLE_BROKER;

    step3 在实现基于服务的SQL数据缓存依赖过程中,需要显式调用SqlDependency.Start来启动接受依赖项更改通知的侦听器。

        SqlDependency.Start(connectionString);  //推荐将这段代码加到Global.asax的Application_Start方法中

        SqlDependency.Stop(connectionString);   //用于关闭,可加在Global.asax的Application_End方法中

    step4  该步骤分别有两种不同的做法。该阶段必须注意步骤。

 

        方法A:建立连接对象,再创建一个SqlCommand实例,创建SqlCacheDependency实例,在这步之后再调用Command对象来获取数据(这个顺序很重要)。之后调用Cache的Insert语句建立一个依赖于一个具体查询数据集的Cache项。

        SqlConnection conn = new SqlConnection(strConnection);

        SqlCommand command = new SqlCommand(strCommandText, conn);

        SqlCacheDependency dependency = new SqlCacheDependency(command);

       

        // 注册方法到委托,该委托是

        CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RemovedCallback);

 

        // 新增或修改一条缓存记录

        Cache.Insert(strCacheKey, objAppCache, dependency, absoluteExpiration, slidingExpiration, CacheItemPriority.Default, onRemove);

 

        方法B:建立连接对象,再创建一个SqlCommand实例,最后创建SqlDependency实例。定义SqlDependency的委托OnChange,当数据发生改变时做出相应的处理(比如清除Cache)。

        SqlConnection conn = new SqlConnection(strConnection);

        SqlCommand command = new SqlCommand(strCommandText, conn);

        SqlCacheDependency dependency = new SqlCacheDependency(command);

        dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);

 

        注意事项:

        不知道是不是还存在BUG,我在项目开发中遇到一些奇怪的现象。同样的代码,在有的机器上运行则能捕捉到变化,有的则完全没反应;也有时会出现Cache刚建立就反复发生依赖改变的事件。偶尔Cache还会数据发生变化却不引发事件。

 

        但从最终项目实施的情况看,似乎都只是某些机器环境造成的不确定因素?这个无法确定。不过起码数据库端是否正常启用,可以通过SQL Server Profiler来查看监视。

posted @ 2009-04-28 22:16  网络渔夫  阅读(348)  评论(1编辑  收藏  举报