首页 > 编程 > .NET > 正文

.NET 2.0 SqlDependency快速上手指南

2024-07-10 13:10:02
字体:
来源:转载
供稿:网友
  本文以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来查看监视。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表