.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,
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
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都会累加,其他字段不变化。
<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对象。