如何在ASP.NET2.0下面使用基于数据库(SqlServer2000)的Cache

原创 2006年06月20日 13:00:00
在.NET1.1下面Cache只能基于文件系统、对象等做Cache的依赖项,但是在.NET 2.0提供了一个新的依赖项SqlCacheDependency,这个项使我们Cache依赖数据库的变化来改变。虽然这做法看起来和1.1里面的变通做法相似,但是它们之间还是有本质的区别(SqlCacheDependency对象的提供)。(1.1的变通做法是为数据表创建触发器,然后该触发器在触发的时候会修改一个本地文件,系统中的某一个Cache的依赖项就是这个本地的文件,这样来通知Cache所缓存的数据变化了)

     .NET 2.0的SqlCacheDependency可以在SqlServer2000以后的版本使用,本文介绍在Sql Server 2000下的使用方法,Sql Server 2005的稍有不同。

       首先需要安装.NET 2.0的框架,当然Sql Server 2000一定要有了。在.NET 2.0里微软提供了一个实用工具:aspnet_regsql(和aspnet_regiis在同一个目录下面),这是一个命令行工具,该命令行参数可以通过aspnet_regsql -?获得。这里我们关心下面几个参数:-ed为SQL缓存依赖项启动数据库,-E使用当前的windows凭据进行身份验证,-d用于应用服务器的数据库名称,如果未指定任何数据库名称,则使用默认数据库“aspnetdb”。本文中将使用微软的示例数据库pubs。那么我们就要使用下面的命令行来创建缓存依赖数据库:

aspnet_regsql -ed -E -d pubs
(注意:这里的命令行参数是去分大小写的)

     当执行完这个命令后,我们可以打开pubs数据库看看发生了什么变化,首先多了一个表:AspNet_SqlCacheTablesForChangeNotification,这个表里面有3个字段,tableName:监视的表名称,notificationCreated:创建时间。changeId:变化编号(累加字段)。还可以看到该数据库多了几个存储过程,他们分别是:

AspNet_SqlCacheRegisterTableStoredProcedure,

AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
 
     从字面上这几个存储过程都很好理解,该存储过程的详细内容可以在查询分析器里面打开后查看。为了可以监视一个表的变化,我们需要通过执行AspNet_SqlCacheRegisterTableStoredProcedure存储过程来指定一个需要监视的表,当然也可以通过实用工具aspnet_regsql来指定,命令行如下:
aspnet_regsql -et -E -d pubs -t authors
 
     通过执行上面的命令以后,aspnet_regsql会为authors创建一个触发器,下面是我执行该命令后创建的触发器:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER  TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [authors]
                       FOR INSERT, UPDATE, DELETE AS BEGIN
                       SET NOCOUNT ON
                       EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'authors'
                       END
                      
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
     从触发器可以看出,当对authors表插入,删除以及更新的时候都会执行存储过程AspNet_SqlCacheUpdateChangeIdStoredProcedure,该存储过程会向AspNet_SqlCacheTablesForChangeNotification表里面添加一条记录。记录如下:
tableName    notificationCreated      changeId   
authors      2006-06-20 09:38:26.267  1
     当你对authors里面的数据做任何修改changeId都会累加,其他字段不变化。
 
     接着要在web.config里面添加一些内容就可以使用了。
首先添加数据库连接串:
<connectionStrings>
    <add name ="pubsConString" connectionString="server=localhost;database=pubs;uid=sa;pwd=mypassword;"/>
  </connectionStrings>

其次添加caching节:
<system.web>
    <caching>
      <sqlCacheDependency enabled="true">
        <databases>
          <add name="pubs" connectionStringName="pubsConString" pollTime="900"/>
        </databases>
      </sqlCacheDependency>
    </caching>
</system.web>
 
下面是测试代码,当页面加载的时候执行如下代码:

protected void Page_Load(object sender, EventArgs e) {
        if (HttpContext.Current.Cache["xxx"] == null) {
            SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs就是databases节指定的pubs,后面是表名
            HttpContext.Current.Cache.Insert("xxx", "xxx", d);
            Response.Write("Create new cache value is xxx.");
        }
        else{
            Response.Write("Load data from cache,value is "+HttpContext.Current.Cache["xxx"].ToString());
        }
    }
 
当首次打开该页面将显示:
Create new cache value is xxx.

刷新页面后显示:
Load data from cache,value is xxx

当使用查询分析器修改authors里面的数据再次刷新页面将显示:
Create new cache value is xxx.

这说明Cache正常工作了,当表authors变化Cache里面的内容会自动失效,我的应用程序也会重新创建一个Cache对象。
 
注意:SqlCacheDependency由两个构造函数,SqlServer2000只支持两个参数的,一个参数的支持SqlServer2005。
 
 
有不正确的地方请指正,谢谢。

sqlserver2000下生成表结构脚本和导入导出数据内容

1 表结构生成sql脚本 在指定的表【bjgl_code】(以下均以bjgl_code为例)上点击右键,选择【所有任务】-》【生成sql脚本】,在右下角的【将要写入脚本的对象】中选择bjgl_code...
  • yunxian_19
  • yunxian_19
  • 2016年12月02日 16:46
  • 2961

win7系统安装sql server 2000 图解全过程

本文主要以截图的方式,讲解如何在win7操作系统上安装sql server 2000的全过程。在Java进一步的学习过程中,我们会接触到数据库的知识。那么何为数据库?简单来说,数据库(Database...
  • Liangqi0329
  • Liangqi0329
  • 2015年08月07日 10:28
  • 2938

Sql2000数据库的备份文件恢复到Sql2005的方法

Sql2000数据库的备份文件恢复到Sql2005的方法
  • Trassion
  • Trassion
  • 2013年11月06日 11:38
  • 8814

用SQLDMO在ASP.NET中备份和还原数据库(SQLSERVER2000)

如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复 我们知道,用SQLDMO可以实现对数据库的备份与恢复,下面给出简单的实现方法。­首先需要添加对SQLDMO引用­1.实现数据库的备份:­...
  • walsyy
  • walsyy
  • 2011年01月10日 11:00
  • 317

安装使用sqlserver2000数据库的一些问题及解决方案

2012年1月安装sqlserver2000数据库时出现的问题,经过一个下午的研究,终于解决了,有必要总结一下: 问题一: 安装程序没有找到存放临时文件的硬盘位置。请准备至少 891 KB 的可用...
  • edson1985
  • edson1985
  • 2012年01月29日 11:27
  • 1589

学生管理系统 ASP.net+SqlServer2000环境

  • 2009年05月12日 21:15
  • 808KB
  • 下载

ASP.NET2.0中将文件上传到数据库

此问题经常被人问,本文列出将文字和图片上传到数据库的方法。包括Access数据库和SQL Server数据库。 Access数据库代码 protected void Bu...
  • q8347901
  • q8347901
  • 2011年11月23日 15:05
  • 303

利用已有数据库配合ASP.NET2.0内置用户 角色 授权系统打造自己的权限分配程序(2)

接上面 当我们按照上面的步骤执行之后,就可以得用"ASP.NET 2.0提供的网站配置工具",在"安全"项目中为各角色建立访问规则了. 但有一点要注意,就是ASP.NET 2.0的访问规则是以"文...
  • li_xiao_ming
  • li_xiao_ming
  • 2011年12月09日 08:49
  • 865

ASP.NET2.0 SQL Server数据库连接详解

今天学习建立ASP.NET 与SQL Server数据库建立连接的方法,在网上搜到一片好文章,果断收藏了!共勉!            文将详细介绍如何使用Connection对象连接数据库 。对于不...
  • u010486124
  • u010486124
  • 2014年12月16日 23:34
  • 1097

智能选课系统源码ASP.NET+SQLServer2000

  • 2007年12月20日 19:52
  • 171KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在ASP.NET2.0下面使用基于数据库(SqlServer2000)的Cache
举报原因:
原因补充:

(最多只允许输入30个字)