今天学习了.net中的缓存,试着做了一下,感觉还不错。
主要是用HttpRuntime.Cache,AggregateCacheDependency和SqlCacheDependency来缓存数据。
首先页面上有个GridView绑定了数据库中的UserInfo表,在用户第一次请求此页面时,数据从数据库中查询出来,并把数据添加到Cache中,之后此页面的请求都从Cache中取数据,直到数据库中Userinfo表的数据更改已后,自动从Cache中移除数据,然后在下一次请求的时候,从数据库中查询数据,并把数据添加到Cache中。
代码如下,aspx页面代码就不贴出来了,就是一个GridView。
- //页面加载
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack&&!IsAsync)
- {
- this.FillDate();
- }
- }
- //填充数据
- private void FillDate()
- {
- string name = txtName.Text.Trim();
- this.GridView1.DataSource = this.GetDataSource(name);
- this.GridView1.DataBind();
- }
- /// <summary>
- /// 获得数据源
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- private DataTable GetDataSource(string name)
- {
- DataTable dt = (DataTable)HttpRuntime.Cache["aa"];
- //如果缓存中没有数据,将从数据库中查询出数据,并把数据添加至缓存
- if (dt == null)
- {
- DBL.IDBOperator db = DBL.DBConncetion.DBInstance;
- string sql = "SELECT uid, username, upwd, name, gender, address, tel FROM [userinfo] WHERE name like '%" + name + "%'";
- dt = db.GetDataTable(sql, CommandType.Text);
- //数据库连接字串
- String strConString = ConfigurationManager.ConnectionStrings["studbConnectionString"].ConnectionString;
- //检索数据库中开启了更改通知的表名
- string[] tableList = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(strConString);
- if (!tableList.Contains("userinfo"))
- {
- //启用userinfo表的更改通知
- SqlCacheDependencyAdmin.EnableTableForNotifications(strConString, "userinfo");
- }
- //要缓存的数据
- SqlCacheDependency sqlCache = new SqlCacheDependency("studb", "userinfo");
- //建立缓存依赖
- AggregateCacheDependency aggCache = new AggregateCacheDependency();
- aggCache.Add(sqlCache);
- //把数据加入缓存
- HttpRuntime.Cache.Add("aa", dt, aggCache, DateTime.Now.AddMinutes(60), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default,null);
- }
- return dt;
- }
这样做的好处是在查询数据时避免反复打开和关闭数据连接。
注意:
(1)在Web.config还要加入如下节点:
<caching>
<sqlCacheDependency pollTime="10000">
<databases>
<add name="studb" connectionStringName="studbConnectionString" pollTime="10000"/>
</databases>
</sqlCacheDependency>
</caching>
(2)默认情况下,SQL Server 2005 数据库不启用服务中介程序。 必须使用 ALTER DATABASE 命令为每个数据库启用服务中介程序。
若要通过使用 SQL Server Management Studio 在 AdventureWorks 数据库上启用 Service Broker,请执行下面的 Transact-SQL 语句:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
(3)不能使用Windows帐户。