當使用SQLSERVER2000中的SQL資料緩存依賴功能時,不得不采用輪詢的機制檢測特定資料庫和資料庫表中的資料是否發生更改。
三個步驟:
1.需要使用aspnet_regsql指令行或者SqlCacheDepencyAdmmin類配置資料庫。目的是啟用資料庫對SQL資料緩存依賴功能的支援。
adpnet_regsql指令行的功能是完成有關資料庫連接配接、應用服務、SQL資料緩存以來、會話狀态等方面的配置。主要用來實作兩項任務:
一是啟用指定資料庫的SQL資料庫緩存依賴功能。aspnet_regsql -S ZGQ -U sa -P sa -d pubs -ed
二是啟用指定表的SQL資料緩存依賴功能。aspnet_regsql -S ZGQ -U sa -P sa -d pubs -t titles -et
這兩項配置完成後在資料庫中回建立一個名為“AspNet_SqlCacheTablesForChangeNotification”表。它是啟用了指定資料庫的資料緩存依賴後,自動建立的資料表。該表用于記錄在資料庫中,啟用了資料緩存依賴的資料表資料被更新的概況資訊。表中有三個資料列。列tableName用于存儲被更新的資料表的名稱,(這些表必須啟用了SQL資料緩存依賴);列notifacationCreated是用于存儲資料表被更新的時間;列changeid是每當所跟蹤資料表的資料發生變化時,這個字段的值就加一。ASPNET将依靠changeid的資料來決定是繼續使用緩存中的資料對象還是進行更新操作。另外在資料庫中還增加了幾個資料存儲過程、角色、觸發器等。這些都是SQL資料緩存依賴功能而自動生成的。
擷取目前資料庫中啟用SQL資料緩存以來功能的資料表清單。
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -lt
關閉資料庫的資料緩存依賴功能
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -dd
關閉資料表的資料緩存依賴功能
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -t titles -dt
也可以使用SqlCacheDepencyAdmmin類配置資料庫實作SQL緩存依賴功能
建議在Global.ascx檔案中使用SqlCacheDepencyAdmin類實作對SQL緩存依賴功能的統一管理:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web.Caching" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在應用程式啟動時運作的代碼
//以下實作的是啟用資料庫和資料庫表的緩存依賴功能
//如果登陸使用者不具有管理pubs資料庫的權限,将發生異常
//擷取連接配接字元串
string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString;
//變量needToInstall訓示是否需要起用資料緩存依賴功能
bool needToInstall = true;
try
{
//擷取資料庫中已經具有資料緩存依賴功能的資料表名稱清單
string[] tables = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionString);
if (tables != null)
{
foreach (string table in tables)
{
//如果已經包含準備設定緩存依賴的表,設定needToInstall值為false
if(table.ToLower().Equals("titles"))
{
needToInstall = false;
}
}
}
}
catch (Exception ex)
needToInstall = true;
//如果變量needToInstall值為true,則啟用資料庫pubs和資料庫表titles的緩存依賴功能。
if (needToInstall)
try
//啟用資料庫pubs的資料緩存依賴功能
SqlCacheDependencyAdmin.EnableNotifications(connectionString);
//啟用資料庫表titles的資料緩存依賴功能
SqlCacheDependencyAdmin.DisableTableForNotifications(connectionString, "titles");
catch (Exception ex)
}
void Application_End(object sender, EventArgs e)
// 在應用程式關閉時運作的代碼
void Application_Error(object sender, EventArgs e)
{
// 在出現未處理的錯誤時運作的代碼
void Session_Start(object sender, EventArgs e)
// 在新會話啟動時運作的代碼