• Asp.net数据库缓存依赖


    Posted on 2009-04-08 09:52 yiki 阅读(504) 评论(0) 编辑 收藏 网摘 所属分类: ASP.NET 
    前言

    本文主要是对《ASP.NET 2.0开发指南》——<数据缓存>章节内容的提取并略有补充。



    参考资料

    1. 《ASP.NET 2.0开发指南》

    2. .NET 2.0 SqlDependency快速上手指南



    支持数据库

    SQL SERVER 7.0/2000/2005版本



    正文

    一、SQL SERVER 7.0/2000和SQL SERVER 2005的简介及比较

    1.1 SQL SERVER 7.0/2000

    SQL SERVER 7.0/2000没有提供内置的支持数据缓存依赖的功能,所以只能通过采用添加特定数据库表、触发器等方式,通过后台不断轮询数据库来检查数据更改。当在数据表上执行INSERT、UPDATE、 DELETE操作时将自动发出更改通知,所以只能监测到表级,具体到哪一行是没法跟踪的。

    使用方法步骤:

    1.1.1 使用aspnet_regsql命令行或SqlCacheDependencyAdmin来配置连接数据库。

    1.1.1.1 ALTER DATABASE <DatabaseName> SET ENABLE_BROKER; 

    aspnet_regsql -S <server> -U sa -P sa -d <database> -ed 启动数据库的数据缓存依赖功能

    aspnet_regsql -S <server> -U sa -P sa -d <database> -t <table> -et 启动数据表的数据缓存依赖功能

    1.1.1.2

    SqlCacheDependencyAdmin.EnableNotifications(connectionString); //启动数据库的数据缓存依赖功能 

    SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table); //启用数据表缓存

    推荐这段代码写在Global.asax的Application_Start方法中,以便应用程序启动的时候就启用数据库和数据表的缓存依赖功能。

    1.1.2 配置Web.config

    <sqlCacheDependency enabled="true" pollTime="10000">配置在<sytem.web>下的<caching>结点下,只有一个数据库的话不必指定下一级<database>结点

    1.1.3 应用程序数据缓存中使用(还可以在数据源控件、输出缓存整个页面时使用,这里就不介绍了,下同)

    SqlCacheDependency scd = new SqlCacheDependency("数据库名称","表名"); 

    Cache.Insert(...,scd,...); 



    1.2 SQL SERVER 2005

    内置支持SQL数据缓存依赖,内置通知传递服务,能够提供更小粒度的数据更改监测,使用和配置简单。

    使用方法步骤:

    1.2.1 检测是否已经启用Service Broker

    Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled') -- 1 表示已经启用 0 表示没有启用

    这个地方我看有些朋友翻译的成“是否能启用”,这是不对的,这里我把英文原文帖出来:“This can be checked by calling "Select databasepropertyex('db Name', 'IsBrokerEnabled')". A '1' means that the broker is enabled. A '0' means that the broker is not enabled. ”。 

    依据我的经验,如果直接在当前SqlServer2005上新建一个数据库的话,默认是打开的,如果是从其他地方数据库导过来的,导入之后默认关闭了。(可能有不准确,大家可以自己试验一下测试一下)。如果已经打开可直接调到1.2.2。

    1.2.1.1 启用Service Broker 

    ALTER DATABASE 数据库名称 SET ENABLE_BROKER; 

    1.2.2 在实现基于服务的SQL数据缓存依赖过程中,需要显式调用SqlDependency.Start来启动接受依赖项更改通知的侦听器。

    SqlDependency.Start(connectionString); //推荐将这段代码加到Global.asax的Application_Start方法中,

    SqlDependency.Stop(connectionString); //用于关闭,可加在Global.asax的Application_End方法中。

    1.2.3 应用程序数据缓存中使用

    SqlCommand cmd = new SqlCommand(sql,conn); 

    SqlCacheDependency scd = new SqlCacheDependency(cmd);

    Cache.Insert(...,scd,...);

    注意:

    a). 必须设置完全限定名称的数据表。即表名前面需要加所有者,如dbo.test。

    b). 必须明确设置所访问数据库列名称,不能使用“*”。

    c). 必须保证不是聚合函数。如COUNT、MAX等。

  • 相关阅读:
    利用CWinThread实现跨线程父子MFC窗口
    GetForgroundWindow函数的不确定性——BUG笔记
    DLL动态链接库的创建
    php正则讲解 及与 js的正则比较
    cookie和session的讲解
    两种排序的方法 冒泡法 插入法 封装版
    php中获取当前时间
    文件下载及header方法介绍
    文件上传
    二分法封装版
  • 原文地址:https://www.cnblogs.com/wzq806341010/p/3081037.html
Copyright © 2020-2023  润新知