开数据库,会发现多了一个数据表aspnet_sqlcachetablesforchangenotification,如下图:
这个表有三个字段,“tableName”记录要追踪的数据表的名称,“notificationCreated”记录开始追踪的时间,“changeId”是一个int类型的字段,每当追踪的数据表的数据发生变化时,这个字段的值就加1。 此外还会在指定的数据库中增加几个存储过程,用来让ASP.NET引擎查询追踪的数据表的情况,并给要使用 Sqlcachedependency 的表加上若干触发器,分别对应到Insert、Update、Delete操作。ASP.NET引擎通过执行它加上的存储过程“AspNet_SqlCachePollingStoredProcedure”,这个存储过程直接返回“AspNet_SqlCacheTablesForChangeNotification”表的内容,让ASP.NET引擎知道哪个表的数据发生的变化。
接下来,我们用visual web developer 2005 beta,来创建一个website,往其中增加一个label标签,以显示当前执行的时间。并往其中增加一个gridview控件,用来显示来自pubs数据库的表authors,代码如下:
<%@ Page Language="VB" AutoEventWireup="false" CompileWith="Default.aspx.vb" ClassName="Default_aspx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:Label ID="Label1" Runat="server" Text="Label" Width="74px" Height="19px"></asp:Label> <br /> <asp:GridView ID="GridView1" Runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> <br /> <br /> <asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT * FROM authors" ConnectionString="Initial Catalog=pubs;Data Source=localhost;user id=sa;password=123456"> </asp:SqlDataSource> </form> </body> </html>
在default.aspx.vb的代码的page_load事件中,加入以下代码
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Label1.Text = CType(System.DateTime.Now(), String) End Sub
接下来,我们开始配置web.config文件。我们采用的配置文件如下:
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="PubsConn" connectionString="Initial Catalog=pubs;Data Source=(local);user id=sa;password=123456"/> </connectionStrings> <system.web> <caching> <sqlCacheDependency enabled="true" pollTime="500"> <databases> <add name="Pubs" connectionStringName="PubsConn"/> </databases> </sqlCacheDependency> </caching> </system.web> </configuration>
其中,要注意的是polltime参数,polltime参数是毫秒,最小值为500,该参数的意义时设置系统多长时间去检查一次cache中的数据是否需要更新。而<database>标签内必须注明需要用到的数据库连接字符串,必须和之前<connectionStrings>中定义的名称相符合(如本例中,connectionstring的名称是pubsconn。
最后,我们在程序的首部,加入页面缓存的定义语句如下: |