快取是每個系統都必定涉及到的功能,一般的快取有乙個難題——什麼時候清除?如asp.net中的cache可以設定乙個過期時間,但設定多久合適呢?長了浪費,短了就失去快取的意義了。使用sqldependency進行快取則可以解決這個問題。
sqldependency是.net2.0封裝的乙個型別,當然要配合sql2005或以上版本才能使用。
sqldependency類需要資料庫的servicebroker來支援,當資料庫中的資料發生變化時通知應用程式更新快取,這才是最有效的快取方式。
步驟一:
sql資料庫必須開啟servicebroker服務,首先檢測是否已經啟用servicebroker,檢測方法:
selectdatabasepropertyex(
'資料庫名稱',
'isbrokerenabled')
--1表示已經啟用0表示沒有啟用
步驟二:
如果servicebroker沒有啟用,使用下面語句啟用:
alterdatabase
<
資料庫名稱
>
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和...