Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存

这里我做一个小小的demo来演示一下这个功能.

1.首先在sqlserver2005 中创建一个test的数据库.添加一个 employee的数据库表.

1CREATE TABLE [dbo].[employee](
2    [id] [int] IDENTITY(1,1NOT NULL,
3    [name] [varchar](50
4
5


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
添加一个global.asax文件代码如下
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">

    
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>
启动sql2005 通知服务.


3.写访问数据库类代码

 1using System;
 2using System.Data;
 3using System.Data.SqlClient;
 4using System.Configuration;
 5using System.Data.Common;
 6using System.Web;
 7using System.Web.Caching;
 8using System.Web.Security;
 9using System.Web.UI;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Web.UI.HtmlControls;
13
14/// <summary>
15/// EmployeeData 的摘要说明
16/// </summary>

17public class EmployeeData
18{
19    public EmployeeData()
20    {
21    }

22
23    private HttpContext context;
24
25    public DataSet GetCacheData()
26    {
27        context = HttpContext.Current;
28        DataSet cache =(DataSet) context.Cache["employee"];
29        if (cache == null)
30        {
31            return GetData();
32        }

33        else
34        {
35            return cache;
36        }

37    }

38
39
40    public DataSet GetData()
41    {
42        string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
43        SqlConnection conn = new SqlConnection(connStr);
44        SqlDataAdapter adp = new SqlDataAdapter("select id,name from dbo.employee", conn);
45        SqlCacheDependency dep = new SqlCacheDependency(adp.SelectCommand);
46        DataSet ds=new DataSet();
47        adp.Fill(ds);
48        context.Cache.Add("employee", ds, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));
49        return ds;
50    }

51
52    public void DataDiff(string key, object value, CacheItemRemovedReason reason)
53    {
54        Console.WriteLine("key:" + key);
55        GetData();
56    }

57
58}

59

值得注意的是sql语句的写法,不能是 select * ,必须一个字段一个字段的写,表名签加架构前缀 如这里是 dbo.employee

4.创建一个asp.net页面,页面代码如下.
 1<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5<html xmlns="http://www.w3.org/1999/xhtml" >
 6<head runat="server">
 7    <title>无标题页</title>
 8</head>
 9<body>
10    <form id="form1" runat="server">
11    <div>
12        <asp:GridView ID="GridView1" runat="server" >
13        </asp:GridView>
14    </div>
15    </form>
16</body>
17</html>
18

5.接着写数据绑定代码.

 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Web.Caching;
 5using System.Data.SqlClient;
 6using System.Web;
 7using System.Web.Security;
 8using System.Web.UI;
 9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Web.UI.HtmlControls;
12
13public partial class _Default : System.Web.UI.Page 
14{
15    protected void Page_Load(object sender, EventArgs e)
16    {
17        EmployeeData em=new EmployeeData();
18        GridView1.DataSource = em.GetCacheData();
19        GridView1.DataBind();
20    }

21
22}

23

好这样代码就完成了,有兴趣的朋友可以测试一下.通过这种方式做缓存,只要数据库发生改变,那么缓存将被清空.

将数据重新读入到缓存中.这样再次刷新时,数据将从缓存中读取.
posted on 2006-09-20 00:24  自由港  阅读(131)  评论(0)    收藏  举报