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

MSSQL
在SQL Server下数据库链接的使用
SQL Server数据库中处理空值时常见问题
巧用一条SQL语句实现其它进制到十进制转换
通过JDBC连接DB2数据库技巧
深入浅出SQL教程之嵌套SELECT语句
SQL Server备份文件中导入现存数据库
SQL多表格查询合并至单一声明的常用方式
也谈如何缩小SQL SERVER日志文件
四个语句帮你提高 SQL Server 的伸缩性
用JavaBean编写SQL Server数据库连接类
sql2k中新增加的Function的sqlbook 的帮助
Mssql处理孤立用户的存储过程
探讨SQL Server中Case 的不同用法
快速清除SQLServer日志的两种方法
解决Sql Server警报的疑难问题
MySQL的数据类型和建库策略
SQL SERVER应用问题解答13例(一)
SQL SERVER应用问题解答13例(二)
多种还原.bak数据库文件方式
SQL语句中的一些特殊参数如何用变量来代替

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 160 ::
收藏到网摘: 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来查看监视。