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

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

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

}

TrackBack:http://www.cnblogs.com/yg_zhang/archive/2006/09/20/508961.html



使用需要注意Service Broker 和通知服务不支持某些SQL

转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/06/02/1494248.html

asp.net 2.0 + sqlserver2005 数据依赖缓存相关推荐

  1. ASP.NET 2.0的页面缓存功能介绍

    页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容.实现页面部分缓存有两种机制:一种是将页面中需要缓存的部分置于用户控件(.ascx文件)中,并且为用户控件设置缓存功能(包含用户控件的AS ...

  2. ASP.NET 2.0收集

    更多滚动 8 ASP.NET2.0连接SQL Server数据库详解 轩辕南宫| 天极开发|2006-07-10 08:00 本文将详细介绍如何使用Connection对象连接数据库.对于不同的.NE ...

  3. 深入剖析ASP.NET 2.0缓冲机制

    一.简介 ASP.NET 1.x Cache API是一种革命性特征.当一个XML文件或另一个缓冲项的内容改变时,Cache API提供了诸如声明性输出缓冲.以编程方式控制输出缓冲以及使缓冲项无效等能 ...

  4. ASP.NET 2.0 中改进的缓存功能

    摘要:本文中,Stephen Walther 将重点介绍 ASP.NET 2.0 中新增的缓存功能,以及如何使用这些新功能改进 ASP.NET 应用程序的性能和可扩展性.(本文包含一些指向英文站点的链 ...

  5. .Asp.Net 2.0 学习历程 菜鸟到中级程序员的飞跃

    如果你是一个菜鸟或者自认为初学者那么本文非常适合你: 不能说这30本书就是最佳组合,但是可以说这个组合不差: 本人曾博览群书,很多书重复,很多书讲的不适用,这些书都是目前书店可以买到的: 达到中级程序 ...

  6. ASP.NET 2.0 绑定高级技巧

    1.简单数据绑定定 <!--ASP.NET 1.x data binding expression --> <%# DataBinder.Eval(Container.DataIte ...

  7. ASP.NET 2.0在SQL Server 2005上自定义分页

    这篇文章讲述了如何利用SQL Server 2005的新特性来简单高效的实现分页.对于那些暂时还没用到SQL Server2005的人们,请看在大规模数据中的高效分页方法.如果需要,这篇文章会补上这里 ...

  8. ASP.NET 2.0的异步页面刷新真给劲

    ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了. 我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作:其次为了拿到s ...

  9. 在ASP.NET 2.0中操作数据教程系列

    在ASP.NET 2.0中操作数据教程系列 Scott Mitchell最近完成了为 www.asp.net 网站撰写的<在ASP.NET 2.0中操作数据 (Working with Data ...

最新文章

  1. JavaScript 中的内存泄露模式
  2. 卡尔曼滤波---实例讲解
  3. python案例源码_【python】python实例集一
  4. 链表相关的算法题大汇总 — 数据结构之链表奇思妙想
  5. Fusion Upload组件 对接 阿里云OSS/七牛/又拍
  6. 退休后你和原工作单位还有联系吗?
  7. 我的CSDN资源下载怎么被自动设置了积分
  8. Java基础类冒泡排序_Java基础 -- 冒泡排序算法(带详细注释)
  9. Ubuntu16.04安装bugzilla
  10. linux上传文件到百度云盘(使用shell脚本,不依赖python库)
  11. 无路可逃java攻略_《生化危机2:重制版》幽灵生还者无路可逃流程攻略
  12. VSCode软件介绍
  13. pyspark之统计基础操作(三)
  14. 05.17 佘山踏青“徒步爬山” 活动回顾
  15. Android新闻客户端
  16. 电通东派:联想Filez让业务流程上云端
  17. Python开发一个《真三国无双20th纪念》人物羁绊计算器
  18. 原生js进阶版轮播图实现(走马灯效果,无缝衔接)
  19. 2021年焊工(技师)考试技巧及焊工(技师)模拟考试题库
  20. 模糊聚类作业-鸢尾花分类

热门文章

  1. Python类、模块、包的概念及区别
  2. 题解 LGOJ P4168 【[Violet]蒲公英】
  3. Redis应用学习——Redis Cluster故障转移
  4. 5G与IoT将成为IPv6强大驱动力
  5. 你是不是 可替代的Linux运维工程师?
  6. 《树莓派实战秘籍》——1.20 技巧20使用Swap添加额外的内存
  7. 初学react.js
  8. TelPhoneManager中的常用方法和状态获取
  9. 进程和线程的联系和区别
  10. C++ 作用域与生命周期