SQL Server 2005實現資料庫快取依賴

iSQlServer發表於2009-05-15

使用方法和步驟如下:

step1

檢測是否已經啟用ServiceBroker,檢測方法:

SelectDATABASEpRoPERTYEX('資料庫名稱','IsBrokerEnabled')

--1表示已經啟用0表示沒有啟用

step2

如果ServiceBroker沒有啟用,使用下面語句啟用:

ALTERDATABASE資料庫名稱SETENABLE_BROKER;

step3

在實現基於服務的SQL資料快取依賴過程中,需要顯式呼叫SqlDependency.Start來啟動接受依賴項更改通知的偵聽器。

SqlDependency.Start(connectionString);//推薦將這段程式碼加到Global.asax的Application_Start方法中

SqlDependency.Stop(connectionString);//用於關閉,可加在Global.asax的Application_End方法中

step4

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

方法A:建立連線物件,再建立一個SqlCommand例項,建立SqlCacheDependency例項,在這步之後再呼叫Command物件來獲取資料(這個順序很重要)。之後呼叫Cache的Insert語句建立一個依賴於一個具體查詢資料集的Cache項。

SqlConnectionconn=newSqlConnection(strConnection);

SqlCommandcommand=newSqlCommand(strCommandText,conn);

SqlCacheDependencydependency=newSqlCacheDependency(command);

//註冊方法到委託,該委託是

CacheItemRemovedCallbackonRemove=newCacheItemRemovedCallback(RemovedCallback);

//新增或修改一條快取記錄

Cache.Insert(strCacheKey,objAppCache,dependency,absoluteExpiration,

slidingExpiration,CacheItemPriority.Default,onRemove);

方法B:建立連線物件,再建立一個SqlCommand例項,最後建立SqlDependency例項。定義SqlDependency的委託OnChange,當資料發生改變時做出相應的處理(比如清除Cache)。

SqlConnectionconn=newSqlConnection(strConnection);

SqlCommandcommand=newSqlCommand(strCommandText,conn);

SqlCacheDependencydependency=newSqlCacheDependency(command);

dependency.OnChange+=newOnChangeEventHandler(Dependency_OnChange);

注意事項:

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

但從最終專案實施的情況看,似乎都只是某些機器環境造成的不確定因素?這個無法確定。不過起碼資料庫端是否正常啟用,可以通過SQLServerProfiler來檢視監視。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-598265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章