首先第一步是确保您的 Service Broker 已经激活,激活 Service Broker (Transact-SQL)如下:

USE master ; GO

ALTER DATABASE YouDatabase SET ENABLE_BROKER ; GO

如果您的数据库与应用程序是分布在网络上的两台服务器上,那么您有必要激活 Service Broker 网络(Transact-SQL)

创建 Service Broker 端点,其间指定端口号和身份验证级别,代码如下:

USE YouDataBase; GO

CREATE ENDPOINT BrokerEndpoint     STATE = STARTED     AS TCP ( LISTENER_PORT = 4037 )     FOR SERVICE_BROKER ( AUTHENTICATION = WINDOWS ) ; GO

接下来是实现在asp.net 2.0缓存的Demo (以下内容引用自由港 http://www.cnblogs.com/yg_zhang/archive/2006/09/20/508961.html 非常感谢他)

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

CREATE TABLE [dbo].[employee]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](50)

2使用 vs2005 创建一个新的asp.net项目.

web.config如下

 <?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings>
<add name="mySource" connectionString="Data Source=./sql2005;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"></add>
</connectionStrings>
<system.web>
<compilation debug="true"/>
<authentication mode="Windows"/>
</system.web>
</configuration>

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.编写测试页面代码.

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.

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

asp.net实现SQL2005的通知数据缓存的更多相关文章

  1. cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

    Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...

  2. 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

    [名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化(  ...

  3. ASP.NET缓存全解析4:应用程序数据缓存 转自网络原文作者李天平

    System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类.此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集.它还为这些对象提供了失效 ...

  4. SQL server数据缓存依赖

    SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持        主要包含以下几 ...

  5. SQL数据缓存依赖总结

    以前只听过SQL server数据缓存依赖,但一直没使用,由于项目需要,才研究了一番,发现了一个很诡异的问题,竟然是一个操作顺序问题导致的. SQL server数据缓存依赖有两种实现模式,轮询模式, ...

  6. SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]

    前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1.     <ASP.NET 2.0开发指南> 2.   ...

  7. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  8. ASP.NET多种不同页面间数据传递的方法

    1. Get(即使用QueryString显式传递)     方式:在url后面跟参数.     特点:简单.方便.     缺点:字符串长度最长为255个字符:数据泄漏在url中.     适用数据 ...

  9. jQuery源代码学习之六——jQuery数据缓存Data

    一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所 ...

随机推荐

  1. CF595 Div31249A,1249B1,1249B2,1249C1,1249C2,1249D1,1249D2,1249E,1249F)题解

    A:水题,先排序,有相连的输出2,否则输出1. #include<bits/stdc++.h> using namespace std; #define pii pair<int,i ...

  2. 新版FPC摄像头测评 OV7725 OV7670 OV9650 OV9655 OV5640 OV5642 OV2640 OV3640 MT9D112

    新版FPC摄像头测评 OV7725 OV7670 OV9650 OV9655 OV5640 OV5642 OV2640 OV3640 MT9D112 最新制样新版FPC摄像头板卡,先看看结构尺寸 再瞧 ...

  3. JS-常考算法题解析

    常考算法题解析 这一章节依托于上一章节的内容,毕竟了解了数据结构我们才能写出更好的算法. 对于大部分公司的面试来说,排序的内容已经足以应付了,由此为了更好的符合大众需求,排序的内容是最多的.当然如果你 ...

  4. 在C#中将对象序列化成Json格式

    在C#中将对象转换为Json格式的字符串. //匿名对象 var dataObj = new { Number = 1, Name = "Json" }; //将返回的时间格式解析 ...

  5. Python 进阶之源码分析:如何将一个类方法变为多个方法?

    前一篇文章<Python 中如何实现参数化测试?>中,我提到了在 Python 中实现参数化测试的几个库,并留下一个问题: 它们是如何做到把一个方法变成多个方法,并且将每个方法与相应的参数 ...

  6. LVM(逻辑卷管理器)部署、扩容、缩小

    物理卷 -- Physical Volume -- PV 卷组  -- Volume Group  -- VG 逻辑卷 -- Logical Volume -- LV 1.硬盘设备管理技术虽然能够有效 ...

  7. 探索JAVA并发 - 可重入锁和不可重入锁

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  8. Nginx环境搭建与使用

    一.背景 之前测试的项目前后端的"路由"(负责把前端发过来的请求转发到相应的后端服务上)要用Nignx来取代原来的tomcat的http server功能,做这个替换的原因是Nig ...

  9. JS---案例:完整的轮播图---重点!

    案例:完整的轮播图 思路: 分5部分做 1. 获取所有要用的元素 2. 做小按钮,点击移动图标部分 3. 做右边焦点按钮,点击移动图片,小按钮颜色一起跟着变 (克隆了第一图到第六图,用索引liObj. ...

  10. Ajax获取网页添加到div中

    1:利用DOM获取该 div 的 ID,然后清空该DIV的内容(如果你需要接着里面的内容添加可不要清空):需要注意点是清空最好用“ empty()  ”: 2: 把  async设成true ,否则又 ...