如何在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。
 
 
有不正确的地方请指正,谢谢。

相关文章推荐

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

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

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

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

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

此问题经常被人问,本文列出将文字和图片上传到数据库的方法。包括Access数据库和SQL Server数据库。 Access数据库代码 protected void Bu...

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

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

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

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

Win2003下面安装SQLSERVER2000遇到的一些问题及解决方案

因为工作需要,安装了Win2003,界面很简陋,如果作为

使用ASP.NET2.0的ReportViewer查看RDLC报表

使用ASP.NET2.0的ReportViewer查看RDLC报表     [字体:大 中 小] 介绍: 这篇文章是前天看...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在ASP.NET2.0下面使用基于数据库(SqlServer2000)的Cache
举报原因:
原因补充:

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