Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存
1.首先在sqlserver2005 中创建一个test的数据库.添加一个 employee的数据库表.
1
CREATE TABLE [dbo].[employee](
2
[id] [int] IDENTITY(1,1) NOT NULL,
3
[name] [varchar](50)
4
)
5![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
CREATE TABLE [dbo].[employee](2
[id] [int] IDENTITY(1,1) NOT NULL,3
[name] [varchar](50) 4
) 5
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
2使用 vs2005 创建一个新的asp.net项目.
web.config如下
1
<?xml version="1.0"?>
2
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
3
<appSettings/>
4
<connectionStrings>
5
<add name="mySource" connectionString="Data Source=.\sql2005;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"></add>
6
</connectionStrings>
7
<system.web>
8
<compilation debug="true"/>
9
<authentication mode="Windows"/>
10
</system.web>
11
</configuration>
12![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<?xml version="1.0"?>2
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">3
<appSettings/>4
<connectionStrings>5
<add name="mySource" connectionString="Data Source=.\sql2005;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"></add>6
</connectionStrings>7
<system.web>8
<compilation debug="true"/>9
<authentication mode="Windows"/>10
</system.web>11
</configuration>12
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
3.编写global.asax文件,启动监听sql2005通知事件.
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<script runat="server">![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
void Application_Start(object sender, EventArgs e) {
string connStr=ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
SqlDependency.Start(connStr);
}
void Application_End(object sender, EventArgs e) {
string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
SqlDependency.Stop(connStr);
}
</script>![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
4.编写数据访问代码.创建一个EmployeeData的类,代码如下
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Common;
using System.Web;
using System.Web.Caching;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
/**//// <summary>
/// EmployeeData 的摘要说明
/// </summary>
public class EmployeeData{
public EmployeeData(){
}![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
private HttpContext context;![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
public DataSet GetCacheData(){
context = HttpContext.Current;
DataSet cache =(DataSet) context.Cache["employee"];
if (cache == null){
return GetData();
}
else{
return cache;
}
}![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
public DataSet GetData(){
string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
SqlDataAdapter adp = new SqlDataAdapter("select id,name from dbo.employee", conn);
SqlCacheDependency dep = new SqlCacheDependency(adp.SelectCommand);
DataSet ds=new DataSet();
adp.Fill(ds);
context.Cache.Add("employee", ds, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));
return ds;
}![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
public void DataDiff(string key, object value, CacheItemRemovedReason reason){
Console.WriteLine("key:" + key);
GetData();
}
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
}![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
这里需要注意的是 select语句的写法, 不能使用 select * 的方式,一定要在表名前加架构名称 如我们这里的 dbo.employee.
5.编写测试页面代码.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" >
</asp:GridView>
</div>
</form>
</body>
</html>
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" >
</asp:GridView>
</div>
</form>
</body>
</html>![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
6.插入后台代码
using System;
using System.Data;
using System.Configuration;
using System.Web.Caching;
using System.Data.SqlClient;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;![cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] ) - qiuguangchun - sandea的个人主页](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e)
{
EmployeeData em=new EmployeeData();
GridView1.DataSource = em.GetCacheData();
GridView1.DataBind();
}
}
本文详细介绍了如何在ASP.NET 2.0中利用SQL Server 2005的异步通知功能实现数据缓存,包括数据库设置、代码实现及测试页面的编写。
3959

被折叠的 条评论
为什么被折叠?



