SQL Server 2005 實現資料庫快取依賴的實現步驟整理

iSQlServer發表於2009-05-13

    SQL SERVER 2005內建支援SQL資料快取依賴,內建通知傳遞服務,能夠提供更小粒度的資料更改監測,使用和配置簡單。使用方法和步驟如下:

    step1 檢測是否已經啟用Service Broker,檢測方法:

        Select DATABASEpRoPERTYEX('資料庫名稱','IsBrokerEnabled')    -- 1 表示已經啟用 0 表示沒有啟用

    step2  如果Service Broker沒有啟用,使用下面語句啟用:

        ALTER DATABASE 資料庫名稱 SET ENABLE_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項。

        SqlConnection conn = new SqlConnection(strConnection);

        SqlCommand command = new SqlCommand(strCommandText, conn);

        SqlCacheDependency dependency = new SqlCacheDependency(command);

       

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

        CacheItemRemovedCallback nRemove = 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來檢視監視。

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

相關文章