步驟一:
sql資料庫必須開啟ServiceBroker服務,首先檢測是否已經啟用ServiceBroker,檢測方法:
SELECT DATABASEPROPERTYEX('dbName','IsBrokerEnabled') --1表示已經啟用,0表示未啟用
如果是建立的新資料庫,預設是已啟用(1)。如果還原資料庫,預設是未啟用(0)。
步驟二:
如果ServiceBroker沒有啟用,使用下面語句啟用:
ALTER DATABASE dbName SET ENABLE_BROKER;
此行此語句時有可能時間會很長,對此可以重啟SQL查詢編輯再執行以上語句。
步驟三:
如果使用的是SQL Server 2005/2008版本資料庫,只需在Page_Load或者Application_Start使用如下語句即可啟用ASP.NET對應的SQL緩衝:
SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
對於使用更低版本需要使用aspnet_regsql來配置。
另外,在最初時使用的是如下語句:
String[] tables = ConfigurationManager.AppSettings["CacheDataTable"].Split(',');SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString, tables);
在使用上面的語句始終報異常:沒有為 SQL 快取通知啟用資料庫(不知道為什麼)
步驟四:
通過以上步驟就可以編寫相應的緩衝代碼,代碼如下:
public class TableDependency{ protected char[] configurationSeparator = new char[] { ',' }; protected AggregateCacheDependency dependency = new AggregateCacheDependency(); protected TableDependency(string configKey) { string dbName = ConfigurationManager.AppSettings["CacheDatabaseName"];//要緩衝的資料庫名稱 string tableConfig = ConfigurationManager.AppSettings[configKey];//從設定檔中擷取需要緩衝的表,以','分隔 string[] tables = tableConfig.Split(configurationSeparator); foreach (string tableName in tables) dependency.Add(new SqlCacheDependency(dbName, tableName));//把表以及對應的資料庫添加到AggregateCacheDependency對象中 } public AggregateCacheDependency GetDependency() { return dependency; }}
String PHONE_HEAD_KEY="User_{0}";String cacheKey = String.Format(PHONE_HEAD_KEY, ID);//緩衝鍵String data = (String)HttpRuntime.Cache[cacheKey];//首先從緩衝來擷取相應的資料if (data == null){ //從資料庫擷取 data = db.GetData(); //擷取一個AggregateCacheDependency對象,UserTableDependency儲存的是表 AggregateCacheDependency cd = new TableDependency("UserTableDependency").GetDependency(); //添加到緩衝 HttpRuntime.Cache.Add(cacheKey, data, cd, DateTime.Now.AddHours(10), Cache.NoSlidingExpiration, CacheItemPriority.High, null);}Response.Write(data);