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为例,所 ...
随机推荐
- jQuery操作页面的元素
主要有添加,替换,删除,清空三种方式: 添加又分为,在之前添加,在之后添加,在元素外之前添加,在元素外之后添加.每个添加方式又有俩种方法(效果一模一样): 俩种方法区添加,在原内容之后: p.appe ...
- Elasticsearch logstash filter
参照官方文档: https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html demo-pipeline.conf i ...
- P4072 [SDOI2016](BZOJ4518) 征途 [斜率优化DP]
题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路 ...
- 2018 ACM/ICPC 南京 I题 Magic Potion
题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...
- 跨站脚本(XSS)备忘单-2019版
这是一份跨站脚本(XSS)备忘录,收集了大量的XSS攻击向量,包含了各种事件处理.通讯协议.特殊属性.限制字符.编码方式.沙箱逃逸等技巧,可以帮助渗透测试人员绕过WAF和过滤机制. 译者注:原文由Po ...
- 【Web技术】401- 在 React 中使用 Shadow DOM
本文作者:houfeng 1. Shadow DOM 是什么 Shadow DOM 是什么?我们先来打开 Chrome 的 DevTool,并在 'Settings -> Preferences ...
- 表格数据js初始绑定
html调用js文件,js初始化时发送Ajax请求,获取页面数据将其写入在html页面上展示 html <div class="card-body"> <!-- ...
- 常见面试题之*args
这个地方理解即可,只是面试的时候会被问到,单独做了一下知识点的整理,不推荐使用. def self_max(a,b,c,d,e,f,g,h,k,x=1,y=3,z=4): #默认参数 print(a, ...
- C#线程学习笔记七:Task详细用法
一.Task类简介: Task类是在.NET Framework 4.0中提供的新功能,主要用于异步操作的控制.它比Thread和ThreadPool提供了更为强大的功能,并且更方便使用. Task和 ...
- 关于ConfigurationSection自定义config的简单使用
1.1.自定义config结构(参考对应颜色标注),放到configuration根节点下: <test> <testInfos> <" /> <& ...