职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1122|回复: 2

.NET 2.0 SqlDependency快速上手指南

[复制链接]
joe 发表于 2007-2-8 19:13 | 显示全部楼层 |阅读模式
  本文以SQL Server 2005上实现为准,SQL Server 2000因为实现机制不同,请查阅相关资料。

  步骤一:在SQL Server 2005上执行ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency特性。

  这条语句最好在数据库未执行任何事务的情况下执行。

  步骤二:调用SqlDependency.Start(String strConnectionString)方法,在应用程序端启用依赖监听器。

  该方法的参数为一个数据库的连接字符串,该数据库必须已经执行过步骤一的操作。

  对于同一连接字符串,若已经执行过该语句,再次执行不会发生任何异常,但返回值会为False.

  如果是在Web程序中使用,建议可以将该语句放在Application_Start事件中执行。

  监听是基于数据库的,而依赖才可以基于表或者查询。

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

  方法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来查看监视。
leiwen501 发表于 2007-3-13 09:15 | 显示全部楼层
hao
kaya 发表于 2007-3-13 19:51 | 显示全部楼层
好.谢谢楼主.::24::
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-11 22:21 , Processed in 0.133123 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表