亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

cache應用(asp.net2.0SQL數據緩存依賴[SqlCacheDependency])

2019-11-14 16:34:35
字體:
來源:轉載
供稿:網友

asp.net 2.0 提供了一個新的數據緩存功能,就是利用sql server2005 的異步通知功能來實現緩存

1.首先在sqlserver2005 中創建一個test的數據庫.

在SQL Server 2005上執行

ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;語句讓相應的數據庫啟用監聽服務,以便支持SqlDependency特性。

添加一個 employee的數據庫表.

 

1CREATETABLE[dbo].[employee](
2[id][int]IDENTITY(1,1)NOTNULL,
3[name][varchar](50)
4)
5



2使用 vs2005 創建一個新的asp.net項目.

web.config如下

1<?xmlversion="1.0"?>
2<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
3<appSettings/>
4<connectionStrings>
5<addname="mySource"connectionString="DataSource=./sql2005;InitialCatalog=test;PersistSecurityInfo=True;UserID=sa;PassWord=sasa"6</connectionStrings>
7<system.web>
8<compilationdebug="true"/>
9<authenticationmode="Windows"/>
10</system.web>
11</configuration>
12

3.編寫global.asax文件,啟動監聽sql2005通知事件.

4.編寫數據訪問代碼.創建一個EmployeeData的類,代碼如下

usingSystem;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Configuration;
usingSystem.Data.Common;
usingSystem.Web;
usingSystem.Web.Caching;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;

///<summary>
///EmployeeData的摘要說明
///</summary>
publicclassEmployeeData
{
publicEmployeeData()
{
}

privateHttpContextcontext;

publicDataSetGetCacheData()
{
context=HttpContext.Current;
DataSetcache=(DataSet)context.Cache["employee"];
if(cache==null)
{
returnGetData();
}
else
{
returncache;
}
}


publicDataSetGetData()
{
stringconnStr=ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
SqlConnectionconn=newSqlConnection(connStr);
SqlDataAdapteradp=newSqlDataAdapter("selectid,namefromdbo.employee",conn);
SqlCacheDependencydep=newSqlCacheDependency(adp.SelectCommand);
DataSetds=newDataSet();
adp.Fill(ds);
context.Cache.Add("employee",ds,dep,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Default,newCacheItemRemovedCallback(this.DataDiff));
returnds;
}

publicvoidDataDiff(stringkey,objectvalue,CacheItemRemovedReasonreason)
{
Console.WriteLine("key:"+key);
GetData();
}

}

這里需要注意的是 select語句的寫法, 不能使用 select * 的方式,一定要在表名前加架構名稱 如我們這里的 dbo.employee.

5.編寫測試頁面代碼.

6.插入后臺代碼

 

轉自:http://www.49028c.com/wzyexf/archive/2008/12/26/1363195.html

前言

本文主要是對《ASP.NET 2.0開發指南》——<數據緩存>章節內容的提取并略有補充。

參考資料

1.《ASP.NET 2.0開發指南》

2..NET 2.0 SqlDependency快速上手指南

支持數據庫

SQL SERVER 7.0/2000/2005版本

正文

一、SQL SERVER 7.0/2000和SQL SERVER 2005的簡介及比較

1.1SQL SERVER 7.0/2000

SQL SERVER 7.0/2000沒有提供內置的支持數據緩存依賴的功能,所以只能通過采用添加特定數據庫表、觸發器等方式,通過后臺不斷輪詢數據庫來檢查數據更改。當在數據表上執行INSERT、UPDATE、DELETE操作時將自動發出更改通知,所以只能監測到表級,具體到哪一行是沒法跟蹤的。

使用方法步驟:

1.1.1使用aspnet_regsql命令行或SqlCacheDependencyAdmin來配置連接數據庫。

1.1.1.1ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;

aspnet_regsql -S <server> -Usa -P sa -d <database>-ed啟動數據庫的數據緩存依賴功能

aspnet_regsql -S <server> -Usa -P sa -d <database> -t <table>-et啟動數據表的數據緩存依賴功能

1.1.1.2

SqlCacheDependencyAdmin.EnableNotifications(connectionString);//啟動數據庫的數據緩存依賴功能

SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table);//啟用數據表緩存

推薦這段代碼寫在Global.asax的Application_Start方法中,以便應用程序啟動的時候就啟用數據庫和數據表的緩存依賴功能。

1.1.2配置Web.config

<sqlCacheDependency enabled="true" pollTime="10000">配置在<sytem.web>下的<caching>結點下,只有一個數據庫的話不必指定下一級<database>結點

1.1.3應用程序數據緩存中使用(還可以在數據源控件、輸出緩存整個頁面時使用,這里就不介紹了,下同)

SqlCacheDependency scd = new SqlCacheDependency("數據庫名稱","表名");

Cache.Insert(...,scd,...);

1.2SQL SERVER 2005

內置支持SQL數據緩存依賴,內置通知傳遞服務,能夠提供更小粒度的數據更改監測,使用和配置簡單。

使用方法步驟:

1.2.1檢測是否已經啟用Service Broker

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

這個地方我看有些朋友翻譯的成“是否能啟用”,這是不對的,這里我把英文原文帖出來:“This can be checked by calling "Select databasepropertyex('db Name', 'IsBrokerEnabled')". A '1' means that the broker is enabled. A '0' means that the broker is not enabled.”。

依據我的經驗,如果直接在當前SqlServer2005上新建一個數據庫的話,默認是打開的,如果是從其他地方數據庫導過來的,導入之后默認關閉了。(可能有不準確,大家可以自己試驗一下測試一下)。如果已經打開可直接調到1.2.2。

1.2.1.1啟用Service Broker

ALTER DATABASE數據庫名稱 SET ENABLE_BROKER;

1.2.2在實現基于服務的SQL數據緩存依賴過程中,需要顯式調用SqlDependency.Start來啟動接受依賴項更改通知的偵聽器。

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

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

1.2.3應用程序數據緩存中使用

SqlCommand cmd = new SqlCommand(sql,conn);

SqlCacheDependency scd = new SqlCacheDependency(cmd);

Cache.Insert(...,scd,...);

注意:

a).必須設置完全限定名稱的數據表。即表名前面需要加所有者,如dbo.test。

b).必須明確設置所訪問數據庫列名稱,不能使用“*”。

c).必須保證不是聚合函數。如COUNT、MAX等。

1.3比較、區別

 

 
 

SQL SERVER 7.0/2000

SQL SERVER 2005

實現機制

輪詢

通知傳遞服務(Service Broker)

是否需要配置啟用

需要

不需要,內置支持

數據更改檢測

限于表級更改監測

表級、行級更改監測

并且很明顯,SQL SERVER 2005的緩存機制更加高效。另外,SqlCacheDependency類還特別結合SQL SERVER 2005 進行了優化:

a).使用SQL SERVER 2005 時,SqlCacheDependency類支持與System.Data.SqlClient.SqlDependency類進行集成。應用程序可創建SqlDependency對象,并通過OnChanged事件處理程序接受通知進行注冊。這樣,應用程序不僅可以使用Sql server 2005的查詢通知機制來監測使用SQL查詢結果無效的數據更改,并將緩存對象從緩存中移除,而且還可以輕松獲取數據更改通知,以便刷新緩存。(從這里可以看出,當觸發onRemoveCallback委托的時候,數據已經從緩存里面刪除了,這樣一來可以手動在委托里面添加緩存,或者干脆設置成null,讓他下次調用的時候再緩存。)

b).不僅向應用程序添加緩存依賴項,還可以與@OutputCache指令一起使用,以生成依賴于SqlServer數據庫表的輸出緩存的頁面或用戶控件。對于用戶控件,@OutputCache指令不支持使用SQL SERVER 2005的查詢通知(即onRemoveCallback委托)。

二、System.Web.Caching.Cache Insert和Add區別

2.1Add方法

object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

2.2Insert方法

void Insert(string key, object value);

void Insert(string key, object value, CacheDependency dependencies);

void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);

void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);

void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

2.3比較、區別

a).Insert方法支持5種重載,使用靈活,而Add方法必須提供7個參數;

b).Add方法可以返回緩存項的數據對象,Insert 返回Void;

c).添加重復緩存情況下,Insert會替換該項,而Add方法會報錯。

三、CacheDependency、AggregateCacheDependency、SqlCacheDependency

3.1CacheDependency是AggregateCacheDependency和SqlCacheDependency的父類。主要用于在應用程序數據緩存對象與文件、緩存鍵、文件或緩存鍵的數組或另外一個CacheDependency對象之間建立依賴關系。CacheDependency監視依賴關系比便在任何對象更改時自動移除緩存對象。CacheDependency可以監測一組(到文件或目錄的)文件路徑的更改情況。

3.2AggregateCacheDependency主要用于實現聚合緩存依賴。如一筆數據同時對兩個表進行緩存依賴,一旦其中任何一個表數據更改緩存將失效。

3.3SqlCacheDependency將應用程序數據緩存對象、頁面輸出緩存、數據源控件等與指定SQL Server數據庫表或Sql Server 2005 查詢結果之間建立緩存依賴關系,在表發生更改(Sql Server 2005行級別更改)時,自動從緩存中刪除和重新添加與該表關聯的緩存對象。一般而言:

SqlCacheDependency (SqlCommand)用于SQL SERVER 2005

SqlCacheDependency (數據庫名, 表名)用于SQL SERVER 7.0/2000

結束

惱于搜來搜去就那么幾篇文章,全是轉載,迫切需要要深入的了解緩存方面的知識,猛想起自己花10塊買的正版<<ASP.NET 2.0開發指南>>還沒有仔細讀過,果然是本好書!寫得極其詳細,這里就整理提取一下然后貼上來以防止經常背著這本818頁的書到處跑。歡迎指正: )

轉自:http://www.49028c.com/over140/archive/2009/01/15/1376318.html

錯誤:無法啟用數據庫中的 Service Broker

解決方案:

Service Broker 標識符在同一網絡上的所有實例中應是唯一的。否則,消息可能被誤傳。
那么怎么能讓數據庫也能使用Service Broker呢?

 

ALTER DATABASE TpriUserManage SET NEW_BROKER
ALTER DATABASE TpriUserManage SET ENABLE_BROKER


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
xxxx欧美18另类的高清| 国产一区二区三区网站| 日韩中文有码在线视频| 久久久99免费视频| 久久久久久国产三级电影| 福利一区视频在线观看| 538国产精品一区二区在线| 国产成人精品av| 久久九九亚洲综合| 欧美久久精品午夜青青大伊人| 日韩av片免费在线观看| 麻豆一区二区在线观看| 久久亚洲精品一区二区| 亚洲a成v人在线观看| 日韩毛片在线观看| 久久乐国产精品| 黄色精品一区二区| 色偷偷噜噜噜亚洲男人的天堂| 日韩精品免费电影| 日本午夜在线亚洲.国产| 91国产精品视频在线| 国产精品伦子伦免费视频| 国产精品igao视频| 国产精品高潮呻吟久久av无限| 日韩中文字幕视频| 亚洲免费av网址| 久久久国产精品x99av| 亚洲精品日韩在线| 亚洲一区免费网站| 国产精品久久久久久久久| 国产91精品不卡视频| 国产成人亚洲综合91| 精品国产一区二区三区久久| 日韩美女视频中文字幕| 国产亚洲精品久久久久久牛牛| 亚洲自拍av在线| 亚洲已满18点击进入在线看片| 美女999久久久精品视频| 国产视频久久久久| 国内精品久久久久| 日韩有码视频在线| 亚洲激情免费观看| 亚洲在线免费看| 欧美夫妻性生活视频| 国产精品女视频| 久久中文字幕一区| 国产欧亚日韩视频| 国产aaa精品| 伊人久久大香线蕉av一区二区| 欧美裸体男粗大视频在线观看| 欧美一区二区三区……| 欧美最猛性xxxx| 美日韩丰满少妇在线观看| 亚洲资源在线看| 都市激情亚洲色图| 国外成人免费在线播放| 美乳少妇欧美精品| 在线视频欧美日韩精品| 日本久久精品视频| 国产噜噜噜噜噜久久久久久久久| 精品视频偷偷看在线观看| 国产91精品黑色丝袜高跟鞋| 亚洲精品国产电影| 国产精品电影在线观看| 91亚洲精品在线观看| 精品久久香蕉国产线看观看亚洲| 亚洲社区在线观看| 成人欧美一区二区三区黑人| 国产啪精品视频| 欧美性猛交xxxx富婆| 日韩风俗一区 二区| 亚洲a∨日韩av高清在线观看| 5566成人精品视频免费| 国产精品伦子伦免费视频| 成人av电影天堂| 亚洲图片制服诱惑| 国产成人久久精品| 欧美激情高清视频| 久久成人精品电影| 久久久精品999| 久久亚洲精品视频| 色av吧综合网| 欧美性高潮床叫视频| 91麻豆国产精品| 黑人巨大精品欧美一区二区免费| 精品视频久久久| 成人黄色大片在线免费观看| 欧美性高跟鞋xxxxhd| 久久人人爽亚洲精品天堂| 国产男人精品视频| 国产精品www色诱视频| 综合网中文字幕| 国产欧美最新羞羞视频在线观看| 久久99精品久久久久久青青91| 亚洲精品女av网站| 欧美激情在线一区| 亚洲专区中文字幕| 亚洲国产精品成人一区二区| 亚洲国产美女久久久久| 国产精品九九九| 91精品国产91久久久久久久久| 久久久人成影片一区二区三区| 亚洲精品大尺度| 久久国产精品首页| 欧美与黑人午夜性猛交久久久| 亚洲综合成人婷婷小说| 91久久精品日日躁夜夜躁国产| 欧美视频在线观看免费网址| 国产主播在线一区| 欧美另类99xxxxx| 欧美性受xxx| 欧美麻豆久久久久久中文| 亚洲欧洲日本专区| 欧美国产日产韩国视频| 日韩在线观看免费av| 日韩av在线高清| 精品国偷自产在线视频| 国产亚洲精品久久久久久牛牛| 亚洲高清一二三区| 亚洲免费电影在线观看| 久久久久久久久综合| 7m第一福利500精品视频| 亚洲级视频在线观看免费1级| 国产日产欧美精品| 91福利视频网| 亚洲激情视频在线| 日韩精品在线观看一区二区| 日本不卡高字幕在线2019| 午夜精品免费视频| 色中色综合影院手机版在线观看| 国产又爽又黄的激情精品视频| 国产免费一区二区三区在线观看| 最近更新的2019中文字幕| 国产区精品视频| 亚洲成人国产精品| 亚洲精美色品网站| 综合网中文字幕| 亚洲偷熟乱区亚洲香蕉av| 日韩免费在线视频| 成人av在线亚洲| 91夜夜揉人人捏人人添红杏| 欧美多人爱爱视频网站| www欧美xxxx| 国产91精品不卡视频| 91在线精品播放| 欧美黑人国产人伦爽爽爽| 亚洲成人1234| 国产精品久久久久久影视| 亚洲精品福利免费在线观看| 日韩精品视频三区| 在线观看日韩av| 欧美大片网站在线观看| 欧美在线视频观看| 日韩中文字幕网站| 久久久久久中文| 国产精品欧美日韩久久| 亚洲女在线观看| 91久久精品在线| …久久精品99久久香蕉国产| 亚洲2020天天堂在线观看| 视频在线观看一区二区| 欧美极品美女视频网站在线观看免费| 91欧美精品成人综合在线观看| 国产精品一区二区三区在线播放|