1.檢查當前數據庫是否啓動SQL Server Service Broker,檢測方法: web
SELECT is_broker_enabled FROM sys.databases WHERE name = '數據庫名'或者
Select DATABASEpRoPERTYEX('數據庫名','IsBrokerEnabled')-- (1 爲已啓用,0爲未啓用)
若是當前數據庫沒有啓動SQL Server Service Broker,能夠執行: sql
ALTER DATABASE 數據庫名 SET ENABLE_BROKER
2.在SQL Server中實現數據緩存依賴,須要顯式調用 SqlDependency.Start()方法來啓動接收依賴項更改通知的偵聽器。一般在global.asax文件的 Application_Start()方法中實現調用。 數據庫
void Application_Start(object sender, EventArgs e) { //在應用程序啓動時運行的代碼 System.Data.SqlClient.SqlDependency.Start(string connectionString); //開啓SQLServer數據緩存依賴 } void Application_End(object sender, EventArgs e) { //在應用程序關閉時運行的代碼 System.Data.SqlClient.SqlDependency.Stop(string connectionString); //關閉SQLServer數據緩存依賴 }
從上面的代碼段中咱們能夠看出start()方法中的一個參數是數據庫鏈接字符串,咱們要將其保存在配置文件web.config中。啓用SqlCacheDependency c#
<connectionStrings> <add connectionString="server=.;database=UserInfo;uid=sa;pwd=svse" name="connStr" providerName="System.Data.SqlClient"/> </connectionStrings>
<caching> <sqlCacheDependency pollTime="6000" enabled="true"> <databases> <add connectionStringName="connStr" name="UserInfo"/> <!--connectionStringName的值必須與connectionStrings的值相同--> </databases> </sqlCacheDependency> </caching>
3.在代碼中使用緩存,併爲其設置SqlCacheDependency依賴: 緩存
public void User_Bind() { DataSet ds; string connstr=System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; if (Cache["userinfo"] == null) { SqlConnection conn = new SqlConnection(connstr); SqlCommand cmd = new SqlCommand("select userName,Address from dbo.Tab_user", conn); ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(ds); //啓動監聽 SqlDependency.Start(connstr); //啓用更改通知 SqlCacheDependencyAdmin.EnableNotifications(connstr); //鏈接到 SQL Server 數據庫併爲 UserInfo 更改通知準備數據庫表 dbo.Tab_user SqlCacheDependencyAdmin.EnableTableForNotifications(connstr, "dbo.Tab_user"); //制定緩存策略 SqlCacheDependency cdep = new SqlCacheDependency("UserInfo", "dbo.Tab_user"); //把查詢到的數據放入緩存 Cache.Insert("UserInfo", ds, cdep); } else { ds = (DataSet)Cache["userinfo"]; } this.gv_user.DataSource = ds; this.gv_user.DataBind(); }