使用SqlDependency進行快取

2022-02-28 18:17:37 字數 1458 閱讀 5829

快取是每個系統都必定涉及到的功能,一般的快取有乙個難題——什麼時候清除?如asp.net中的cache可以設定乙個過期時間,但設定多久合適呢?長了浪費,短了就失去快取的意義了。使用sqldependency進行快取則可以解決這個問題。

sqldependency是.net2.0封裝的乙個型別,當然要配合sql2005或以上版本才能使用。

sqldependency類需要資料庫的servicebroker來支援,當資料庫中的資料發生變化時通知應用程式更新快取,這才是最有效的快取方式。

步驟一:

sql資料庫必須開啟servicebroker服務,首先檢測是否已經啟用servicebroker,檢測方法:

select

databasepropertyex(

'資料庫名稱',

'isbrokerenabled')

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

步驟二:

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

alter

database

<

資料庫名稱

>

setenable_broker;

步驟三:

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

sqldependency.start(connectionstring);

//

步驟四:快取實現

使用sqldependency實現快取的**:

public

class

cachehelper

else

}private

static

void

dep_onchange(

object

sender, sqlnotificationeventargs e)

}

注意:使用 sqldependency 訂閱查詢通知必須向sql server service broker提供制定規則的查詢語句,一般來講,必須是簡單的sql查詢語句(

不能用*,不能用top,不能用函式,包括聚合函式,不能用子查詢,包括where後的子查詢,不能用外連線,自連線,不能用臨時表,不能用變數,不能用檢視,不能垮庫,表名之前必須加類似dbo資料庫所有者這樣的字首

)例如:select * from table1,select column1 from table1,select count(*) from table1 都是錯誤的sql查詢語句,select column1 from dbo.table1 則是正確的語句。

使用SqlDependency進行快取

快取是每個系統都必定涉及到的功能,一般的快取有乙個難題 什麼時候清除?如asp.net中的cache可以設定乙個過期時間,但設定多久合適呢?長了浪費,短了就失去快取的意義了。使用sqldependency進行快取則可以解決這個問題。sqldependency是.net2.0封裝的乙個型別,當然要配合...

SqlDependency執行複雜SQL語句

參考 l l l l sqldependency監聽的sql語句有很多限制。參考 我有乙個需求 用sql1監聽table a,但是需要的結果是sql2 table a和table b的outer join 的sql語句 一直以為只要簡單在 onchangeeventhandler託管函式中,不執行s...

關於SqlDependency的學習

使用 sqldependency 檢測更改 1 定義或引入資料庫連線字串sqlstr,並配置config檔案中資料庫連線 2 初始 中傳入連線字串,啟動基於資料庫的監聽 sqldependency.start sqlstr update1 3 寫update1 方法 建立sqlconnection和...