• SQL Server 2005实现数据库缓存依赖


    使用方法和步骤如下:

    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来查看监视。

     

    http://www.tzlink.com/info/show.php?aid=8796

  • 相关阅读:
    6-1
    5-9
    5-8
    5-7
    5-6
    实验4-1:掌握Android应用调试方法、添加新界面
    实验3:理解Activity 的生命周期
    R.java常见问题解决方案
    配置Android模拟器
    第02周实验: 变量、算术运算和数据类型
  • 原文地址:https://www.cnblogs.com/wbzhao/p/2495464.html
Copyright © 2020-2023  润新知