asp.net 2.0 使用sqlserver2005 新的通知数据缓存实现

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

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

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

 

1 CREATE   TABLE   [ dbo ] . [ employee ] (
2      [ id ]   [ int ]   IDENTITY ( 1 , 1 NOT   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

3.编写global.asax文件,启动监听sql2005通知事件.

<% @ 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 >

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;

/// <summary>
/// EmployeeData 的摘要说明
/// </summary>

public   class  EmployeeData
{
    
public EmployeeData()
    
{
    }


    
private HttpContext context;

    
public DataSet GetCacheData()
    
{
        context 
= HttpContext.Current;
        DataSet cache 
=(DataSet) context.Cache["employee"];
        
if (cache == null)
        
{
            
return GetData();
        }

        
else
        
{
            
return cache;
        }

    }



    
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;
    }


    
public void DataDiff(string key, object value, CacheItemRemovedReason reason)
    
{
        Console.WriteLine(
"key:" + key);
        GetData();
    }


}

这里需要注意的是 select语句的写法, 不能使用 select *  的方式,一定要在表名前加架构名称 如我们这里的 dbo.employee.

5.编写测试页面代码.

<% @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< 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 >

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;

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();
    }


}

这样整个demo就完成了.有兴趣的朋友可以使用我提供的代码测试一下.如需转载 请通知作者本人.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值