- 輪詢模式(Polling)
主要支援SQL Server 7.0 / 2000版本使用(也可在2005 / 2008使用,但最好不要)
由ASP.NET來詢問資料庫,資料表是否有異動,來決定是否更新快取資料 - 查詢通知模式
主要支援SQL Server 2005 / 2008版本使用
由資料庫主動通知
啟用Service Broker
在SQL Server 2005 / 2008想要使用查詢通知模式,必須先對資料庫做個設定,你必須啟用「Service Broker」功能,因為查詢通知模式是由Service Broker所提供,但資料庫預設是不啟用。
啟動方法一:透過T-SQL
--enable啟用 alter database northwind set enable_broker; --disable停用 alter database northwind set disable_broker;
啟動方法二:SSMSE
物件總管 &rrar; 選擇資料庫 &rrar; 右鍵 &rrar; 屬性 &rrar; 選項 &rrar; Service Broker &rrar; 改為True
啟用Service Broker |
讓ASP.NET接聽通知
先新增一個「ASP.NET 網站」
- 然後打開Global.asax
- Import System.Data.SqlClient
- Import System.Web.Configuration
- 在Application_Start啟動SQL快取相依
- 在Application_End停用SQL快取相依
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' 應用程式啟動時執行的程式碼 SqlDependency.Start(WebConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString.ToString()) End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) ' 應用程式關閉時執行的程式碼 SqlDependency.Stop(WebConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString.ToString()) End Sub
透過SqlDependency.Start()來啟動快取相依,傳入連線字串是跟ASP.NET說我是要與那個資料庫進行快取相依。
Output Caching使用SqlDependency
在們到Default.aspx裡宣告Output Caching, 重點在必須使用屬性SqlDependency="CommandNotification"(UC不能使用):
<%@ OutputCache Duration="3600" VaryByParam="none" SqlDependency="CommandNotification" %>
在Default.aspx放置一個Lable及GridView,GridView取出資料庫資料(請自行實作),Lable在Page_Load寫一行程式:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Me.Label1.Text = Now.ToString() End Sub
SqlDependency(GridView) |
放時間是為了確定我們有快取,然後執行Default.aspx,在快取時間內,你不斷按重新整理,你會發現「時間」是不會更新,而且網頁動作也比較快,也就證明我們的快取是成功的,再來開啟SSMSE,修改GridView所顯示的表格的值:
SqlDependency效果 |
在SqlDataSource使用SqlDependency
如果你的頁面上只是簡單的GridView + SqlDataSource,那你可以減去宣告Output Cache那一段,可以直接將EnableCaching屬性改為True,將SqlCacheDependency屬性改為「CommandNotification」:
SqlDataSource -- SqlDependency屬性 |
最後一張圖的SqlCacheDependecy屬性值是「CommandNotification」,請自行更正。
回覆刪除