SqlDependency配合ServiceBroker實現緩存
步驟一:
sql數據庫必須開啟ServiceBroker服務,首先檢測是否已經啟用ServiceBroker,檢測方法:
Select DATABASEpRoPERTYEX('dbname','IsBrokerEnabled')
--1表示已經啟用0表示沒有啟用
步驟二:
如果ServiceBroker沒有啟用,使用下面語句啟用:
ALTER DATABASE <數據庫名稱> SET ENABLE_BROKER;
步驟三:
在實現基於服務的SQL數據緩存依賴過程中,需要顯式調用SqlDependency.Start來啟動接受依賴項更改通知的偵聽器。
SqlDependency.Start(connectionString);//推薦將這段代碼加到Global.asax的Application_Start方法中
SqlDependency.Stop(connectionString);//用於關閉,可加在Global.asax的Application_End方法中
步驟四:緩存實現
使用sqldependency實現緩存的代碼:
public class CacheHelper {
static Cache WebCache = HttpContext.Current.Cache;
static string DefaultConn = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
public static DataTable GetSystemParams() {
if (WebCache["SystemParam"] == null) {
string strSQL = "select uSystemParamID,ParamName,ParamValue,Description from dbo.DTS_SystemParam";
SqlDataAdapter da = new SqlDataAdapter(strSQL, DefaultConn);
SqlDependency dep = new SqlDependency(da.SelectCommand);
dep.OnChange += new OnChangeEventHandler(dep_OnChange);
DataTable tbl = new DataTable(); da.Fill(tbl);
WebCache["SystemParam"] = tbl;
return tbl;
}
else {
return (DataTable) WebCache["SystemParam"];
}
}
private static void dep_OnChange(object sender, SqlNotificationEventArgs e) {
WebCache.Remove("SystemParam");
}
}