当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server 2005实现数据库缓存依赖

MSSQL
将代码页从SQL Server 7.0改变到SQL Server 2000
浅析SQL SERVER一个没有公开的存储过程
使用存储过程时一个错误的解决方法
执行一个安全的SQL Server安装
SQL导出到MYSQL的简单方法
SQL Server 7六种数据移动方法
数据库升迁从sqlserver6.5到sqlserver2000
用SQL 2000创建用户化XML流
解决SQL Server 2000之日志传送功能
保持多台服务器数据的一致性
将ACCESS转化成SQL2000需要注意的几个问题
一次特殊的SQL Server安装奇遇
实现上千万条数据的分页显示
使用用于SQL Server的IIS虚拟目录管理实用工具
SQL Server连接ACCESS数据库的实现
使用SQL Server数据转换服务升迁Access数据库
SQLServer和Access、Excel数据传输简单总结
XML文件导入SQL Server 2000
在视图中使用ORDER BY子句
内嵌或嵌入SQL和存储过程之对比

MSSQL 中的 SQL Server 2005实现数据库缓存依赖


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 109 ::
收藏到网摘: n/a

使用方法和步骤如下:

step1

检测是否已经启用ServiceBroker,检测方法:

SelectDATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')

--1表示已经启用0表示没有启用

step2

如果ServiceBroker没有启用,使用下面语句启用:

ALTERDATABASE数据库名称SETENABLE_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项。

SqlConnectionconn=newSqlConnection(strConnection);SqlCommandcommand=newSqlCommand(strCommandText,conn);

SqlCacheDependencydependency=newSqlCacheDependency(command);

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

CacheItemRemovedCallbackonRemove=newCacheItemRemovedCallback(RemovedCallback);

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

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

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

SqlConnectionconn=newSqlConnection(strConnection);SqlCommandcommand=newSqlCommand(strCommandText,conn);

SqlCacheDependencydependency=newSqlCacheDependency(command);

dependency.OnChange+=newOnChangeEventHandler(Dependency_OnChange);

注意事项:

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

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