转 .NET 2.0 SqlDependency快速上手指南
此文以SQL Server 2005上實(shí)現(xiàn)為準(zhǔn),SQL Server 2000因?yàn)閷?shí)現(xiàn)機(jī)制不同,請(qǐng)查閱相關(guān)資料。
?????? 步驟一:在SQL Server 2005上執(zhí)行ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;語句讓相應(yīng)的數(shù)據(jù)庫啟用監(jiān)聽服務(wù),以便支持SqlDependency特性。
?????? 這條語句最好在數(shù)據(jù)庫未執(zhí)行任何事務(wù)的情況下執(zhí)行。
?????? 步驟二:調(diào)用SqlDependency.Start(String strConnectionString)方法,在應(yīng)用程序端啟用依賴監(jiān)聽器。
?????? 該方法的參數(shù)為一個(gè)數(shù)據(jù)庫的連接字符串,該數(shù)據(jù)庫必須已經(jīng)執(zhí)行過步驟一的操作。
?????? 對(duì)于同一連接字符串,若已經(jīng)執(zhí)行過該語句,再次執(zhí)行不會(huì)發(fā)生任何異常,但返回值會(huì)為False.
?????? 如果是在Web程序中使用,建議可以將該語句放在Application_Start事件中執(zhí)行。
?????? 監(jiān)聽是基于數(shù)據(jù)庫的,而依賴才可以基于表或者查詢。
?????? 步驟三:該步驟分別有兩種不同的做法。該階段必須注意步驟。
?????? ?????? 方法A:建立連接對(duì)象,再創(chuàng)建一個(gè)SqlCommand實(shí)例,創(chuàng)建SqlCacheDependency實(shí)例,在這步之后再調(diào)用Command對(duì)象來獲取數(shù)據(jù)(這個(gè)順序很重要)。之后調(diào)用Cache的Insert語句建立一個(gè)依賴于一個(gè)具體查詢數(shù)據(jù)集的Cache項(xiàng)。
?????????????SqlConnection conn = new SqlConnection(strConnection);
???????? SqlCommand command = new SqlCommand(strCommandText, conn);
???????? SqlCacheDependency dependency = new SqlCacheDependency(command);
????????
???????? // 注冊(cè)方法到委托,該委托是
???????? CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RemovedCallback);
???????? // 新增或修改一條緩存記錄
???????? Cache.Insert(strCacheKey, objAppCache, dependency, absoluteExpiration, slidingExpiration, CacheItemPriority.Default, onRemove);
???? ???? 方法B:建立連接對(duì)象,再創(chuàng)建一個(gè)SqlCommand實(shí)例,最后創(chuàng)建SqlDependency實(shí)例。定義SqlDependency的委托OnChange,當(dāng)數(shù)據(jù)發(fā)生改變時(shí)做出相應(yīng)的處理(比如清除Cache)。
????????????? SqlConnection conn = new SqlConnection(strConnection);
???????? SqlCommand command = new SqlCommand(strCommandText, conn);
???????? SqlCacheDependency dependency = new SqlCacheDependency(command);
????????????? dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);
???? 注意事項(xiàng):
與 strCommandText參數(shù)關(guān)聯(lián)的 SQL 語句必須包括以下內(nèi)容:
-
完全限定的表名,包括表所有者的名稱。
例如,要引用由數(shù)據(jù)庫所有者擁有的名為 "customers" 的表,SQL 語句必須引用 "dbo.customers"。
-
在 Select 語句中顯式指定列名。不能使用星號(hào) (*) 通配符來選擇表中的所有列。
例如,不能使用 "select * from customers",而必須使用 "select name, address, city, state from dbo.customers"。
?????? 不知道是不是還存在BUG,我在項(xiàng)目開發(fā)中遇到一些奇怪的現(xiàn)象。同樣的代碼,在有的機(jī)器上運(yùn)行則能捕捉到變化,有的則完全沒反應(yīng);也有時(shí)會(huì)出現(xiàn)Cache剛建立就反復(fù)發(fā)生依賴改變的事件。偶爾Cache還會(huì)數(shù)據(jù)發(fā)生變化卻不引發(fā)事件。
?????? 但從最終項(xiàng)目實(shí)施的情況看,似乎都只是某些機(jī)器環(huán)境造成的不確定因素?這個(gè)無法確定。不過起碼數(shù)據(jù)庫端是否正常啟用,可以通過SQL Server Profiler來查看監(jiān)視。
轉(zhuǎn)載于:https://www.cnblogs.com/greateast/archive/2008/02/14/1068974.html
總結(jié)
以上是生活随笔為你收集整理的转 .NET 2.0 SqlDependency快速上手指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义控件体会
- 下一篇: Microsoft Asp.Net Aj