asp.net实现SQL2005的通知数据缓存
首先第一步是确保您的 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的通知数据缓存的更多相关文章
- cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )
Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...
- 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)
[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( ...
- ASP.NET缓存全解析4:应用程序数据缓存 转自网络原文作者李天平
System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类.此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集.它还为这些对象提供了失效 ...
- SQL server数据缓存依赖
SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1 轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持 主要包含以下几 ...
- SQL数据缓存依赖总结
以前只听过SQL server数据缓存依赖,但一直没使用,由于项目需要,才研究了一番,发现了一个很诡异的问题,竟然是一个操作顺序问题导致的. SQL server数据缓存依赖有两种实现模式,轮询模式, ...
- SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1. <ASP.NET 2.0开发指南> 2. ...
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...
- ASP.NET多种不同页面间数据传递的方法
1. Get(即使用QueryString显式传递) 方式:在url后面跟参数. 特点:简单.方便. 缺点:字符串长度最长为255个字符:数据泄漏在url中. 适用数据 ...
- jQuery源代码学习之六——jQuery数据缓存Data
一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所 ...
随机推荐
- [TimLinux] Python 模块
1. 概念 模块是最高级别的程序组织单元,它将程序文件和数据封装起来以便重用.实际上,模块往往对应Python文件,每一个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量,模块和 ...
- HDU4918 Query on the subtree 点分治+树状数组
bobo has a tree, whose vertices are conveniently labeled by 1,2,…,n. At the very begining, the i-th ...
- UVA11324 The Lagest Lique(SCC缩点+DP)
Given a directed graph G, con- sider the following transformation. First, create a new graph T(G) to ...
- 地兵布阵 -----------HDU-1166
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- 笔记||Python3之文件的读写
[文件的读模式] 文件的对象:文件的读写通过文件操作对象进行. Python2 ----- File Python3 ----- TextIOWrapper ...
- 使用stm32开发 USB_CAN 适配器测试
USB_CAN 适配器测试例程 采用CDC透传模式 一.简介 CAN总线无处不在,在设计开发中,到处需要用到CAN总线调试工具,本工具可以作为CAN的基础测试工具,用于监听CAN总线,或测试CAN数据 ...
- .NET Core的响应式框架,基于Ace Admin框架菜单导航,Bootstrap布局,fontAwesome图标,内嵌Iframe用EasyUI做数据绑定,动态配置列表,动态配置表单
netnrf 响应式框架 用于快速开发的响应式框架 演示:https://rf2.netnr.com v3.x 前端采用 jQuery + Bootstrap + EasyUI + AceAdmin ...
- screen虚拟终端工具
说明:有时候我们要执行一个命令或脚本,需要几小时甚至几天,但是不能中断,有时想查看当前输出信息的时候,可以将它丢到后台运行,但是后台运行却无法显示或输出相关信息出来:我们可以使用一个虚拟终端工具scr ...
- Vue中兄弟组件间传值-(Bus/总线/发布订阅模式/观察者)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Jackson】使用学习
Jackson学习 文档:http://tutorials.jenkov.com/java-json/index.html https://github.com/FasterXML/jackson/w ...