使用数据缓存技术主要原因是为了提高应用程序性能,但在使用数据缓存技术时,需要知道如何
在数据失去原有作用时终止缓存。SqlDependency 对象允许缓存数据,并在修改数据时发出通知。

使用SqlDependency 对象之前需要开启下面的数据库服务。

一、必须在 MSDB 数据库中的 QueryNotificationService 服务上想 Guest 用户授予发送权限。

运行以下代码启动 QueryNotificationService 服务:

USE MSDB
    GRANT SEND ON SERVICE::
    [http://schemas.microsoft.com/SQL/Notification/QueryNotificationService]
    TO GUEST

注:QueryNotificationService 服务的完整 URL 名称是区分大小写的。

二、SqlDependency 对象会使用 Service Broker 将消息发送给 QueryNotificationService
服务,所以需要启用 Service Broker。

运行以下代码启动 Service Broker:

USE Master
    ALTER DATABASE Northwind SET ENABLE_BROKER

三、在数据库服务器上启用CLR。

启用 CLR 命令如下:

USE Master
    EXEC sp_configure 'clr enabled', 1
    RECONFIGURE

使用 SqlDependency 对象

下面是一个简单ASP.NET应用程序, 该应用程序只包含一个 GridView 对象。加载窗体的时候
首先执行 SqlDependency.Start 方法,然后调用 UpdateGrid 方法填充网格控件。如果数据库中
的数据发生变化,则数据库会给应用程序发送一个通知,这时程序就会引发SqlDependency 的
OnChange 事件。

C#

public partial class _Default : System.Web.UI.Page
    {
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(
            ConfigurationManager.ConnectionStrings["LocalSqlSever"].ConnectionString);
       
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlDependency.Start(builder.ConnectionString);
            UpdateGrid();
        }

private void UpdateGrid()
        {
            using (SqlConnection connection =
                new SqlConnection(builder.ConnectionString))
            {
                using (SqlCommand command =
                    new SqlCommand("Search", connection))
                {
                    command.CommandType = CommandType.StoredProcedure;
                    connection.Open();
                    SqlDependency dependency =
                        new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

GridView1.DataSource = command.ExecuteReader();
                    GridView1.DataBind();
                }
            }
        }

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            UpdateGrid();
        }
    }
        }

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            UpdateGrid();
        }

启动该应用程序后,如果运行一个能够改变数据表中数据的程序,如 Microsoft SQL Managerment Studio.
在修改表中数据后,则会发现 GridView 对象会进行相应的更新。

转载于:https://www.cnblogs.com/waylee/archive/2008/10/23/1318074.html

使用 SqlDependency 对象缓存数据以提高性能相关推荐

  1. msra数据集_ECCV 2020 | 通过聚类无标签数据来提高人脸识别能力

    Improving Face Recognition by Clustering Unlabeled Faces in the Wild 作者团队:马萨诸塞大学&NEC实验室等 论文:http ...

  2. 缓存jQuery对象来提高性能

    jQuery使元素的选择变得异常简单,这也是它快速流行起来的一大原因,如果你看刚刚开始使用jQuery朋友写的代码时,会发现很多数人写的代码都在滥用jQuery选择器.   如果你发现同一元素被查找多 ...

  3. 通过缓存数据库结果提高PHP性能(转)

    众所周知,缓存数据库查询的结果可以显著缩短脚本执行时间,并最大限度地减少数据库服务器上的负载.如果要处理的数据基本上是静态的,则该技术将非常有效.这是因为对远程数据库的许多数据请求最终可以从本地缓存得 ...

  4. 对象池回收对象_回收对象以提高性能

    对象池回收对象 总览 在上一篇文章中,我说过对象反序列化更快的原因是由于使用了回收对象. 由于两个原因,这可能令人惊讶:1)相信如今创建对象是如此之快,无关紧要或与回收自己一样快,2)默认情况下,任何 ...

  5. 通过缓存数据库结果提高PHP性能

    众所周知,缓存数据库查询的结果可以显著缩短脚本执行时间,并最大限度地减少数据库服务器上的负载.如果要处理的数据基本上是静态的,则该技术将非常有效.这是因为对远程数据库的许多数据请求最终可以从本地缓存得 ...

  6. 不要在Android的Application对象中缓存数据!

    原文地址: http://zmywly8866.github.io/2014/12/26/android-do-not-store-data-in-the-application-object.htm ...

  7. 无法打开服务器服务性能对象,无法打开服务器服务性能对象。数据段的第一个四字节 (DWORD) 包含状态代码。...

    突然发现有台服务器出现了这个系统错误 无法打开服务器服务性能对象.数据段的第一个四字节 (DWORD) 包含状态代码. 百度搜索了下,结果很多,且微信官方论坛也关闭了这个话题,官方也没有办法解决这个问 ...

  8. es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能

    问题:如果数据量特别大,如何优化ES的查询性能? 可以从以下几个方面进行思考: File Cache可用的内存: ES的查询严重依赖OS的File Cache,所以说内存分配的内存肯定是越多越好.最理 ...

  9. 想知道Java程序如何才能提高性能吗?

    介    绍 在本文中,我们将讨论一些有助于提高Java应用程序性能的方法.我们将从如何定义可衡量的性能目标开始,然后查看不同的工具来衡量和监控应用程序性能,并找出瓶颈. 此外,还将介绍一些常见的Ja ...

  10. java项目怎样提高性能_Java程序员成长之路(如何提高Java程序性能?)

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

最新文章

  1. s:if 标签 字符串比较 正确用法和错误用法
  2. appfog下用客户端管理你的mongodb、mysql(类似)
  3. 笔记-项目整体管理-变更管理-实施整体变更控制
  4. linux 查看链接最终目标,linux学习笔记7-链接
  5. python历史背景_python学习之旅1-1(python背景、安装介绍)
  6. android studio android 测试
  7. linux命令--vi,vim
  8. 获取Oracle隐含參数信息
  9. 微信小程序-滚动消息通知
  10. vue 圆形 水波_canvas 水滴图、液体进度条、仿加速球、圆球水波图
  11. log4j日志级别配置完成后不生效 系统一直打印debug日志
  12. 51单片机流水灯现象2
  13. esp32触摸touch功能使用过程详述arduino
  14. Objective-C ------ 多态
  15. 小程序源码:游戏助手王者战力查询扫码登录多功能微信小程序
  16. 【架构】分享个人制作《数字档案馆系统总体架构图》
  17. QFileInfo截取文件后缀
  18. 教你cad版本怎么用转换器转换操作
  19. 【算法概论】分治算法:k路归并
  20. 汪峰演唱会的线上营销和线下营销

热门文章

  1. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_21-页面静态化-静态化测试-静态化程序编写...
  2. 一篇真正教会你开发移动端页面的文章(一)
  3. 阶段3 1.Mybatis_03.自定义Mybatis框架_6.自定义Mybatis的编码-实现基于XML的查询所有操作...
  4. Ubuntu 配置VNC时,出现“perl: warning: Falling back to the standard locale (C).”等提示错误解决方法...
  5. UVa 10003 Cutting Sticks(区间DP)
  6. 用.NET的File控件上传文件的解决方案
  7. 设置元素的高度为百分比,结果不起作用的解决方法
  8. linux中最常用命令
  9. LOJ2257 SNOI2017 遗失的答案 容斥、高维前缀和
  10. jmeter监控服务器CPU、网络、内存等信息