程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> .NET 2.0 SqlDependency快速上手指南

.NET 2.0 SqlDependency快速上手指南

編輯:關於ASP.NET

本文以SQL Server 2005上實現為准,SQL Server 2000因為實現機制不同,請查閱相關資料。

步驟一:在SQL Server 2005上執行ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;語句讓相應的數據庫啟用監聽服務,以便支持SqlDependency特性。

這條語句最好在數據庫未執行任何事務的情況下執行。

步驟二:調用SqlDependency.Start(String strConnectionString)方法,在應用程序端啟用依賴監聽器。

該方法的參數為一個數據庫的連接字符串,該數據庫必須已經執行過步驟一的操作。

對於同一連接字符串,若已經執行過該語句,再次執行不會發生任何異常,但返回值會為False.

如果是在Web程序中使用,建議可以將該語句放在Application_Start事件中執行。

監聽是基於數據庫的,而依賴才可以基於表或者查詢。

步驟三:該步驟分別有兩種不同的做法。該階段必須注意步驟。

方法A:建立連接對象,再創建一個SqlCommand實例,創建SqlCacheDependency實例,在這步之後再調用Command對象來獲取數據(這個順序很重要)。之後調用Cache的Insert語句建立一個依賴於一個具體查詢數據集的Cache項。

SqlConnection conn = new SqlConnection(strConnection);
SqlCommand command = new SqlCommand(strCommandText, conn);
SqlCacheDependency dependency = new SqlCacheDependency(command);

// 注冊方法到委托,該委托是
CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RemovedCallback);

// 新增或修改一條緩存記錄
Cache.Insert(strCacheKey, objAppCache, dependency, absoluteExpiration, slidingExpiration, CacheItemPriority.Default, onRemove);

方法B:建立連接對象,再創建一個SqlCommand實例,最後創建SqlDependency實例。定義SqlDependency的委托OnChange,當數據發生改變時做出相應的處理(比如清除Cache)。

SqlConnection conn = new SqlConnection(strConnection);
SqlCommand command = new SqlCommand(strCommandText, conn);
SqlCacheDependency dependency = new SqlCacheDependency(command);
dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);

注意事項:

不知道是不是還存在BUG,我在項目開發中遇到一些奇怪的現象。同樣的代碼,在有的機器上運行則能捕捉到變化,有的則完全沒反應;也有時會出現Cache剛建立就反復發生依賴改變的事件。偶爾Cache還會數據發生變化卻不引發事件。

但從最終項目實施的情況看,似乎都只是某些機器環境造成的不確定因素?這個無法確定。不過起碼數據庫端是否正常啟用,可以通過SQL Server Profiler來查看監視。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved