转自:https://blog.csdn.net/u012183487/article/details/77776930

System.Data.SqlClient命名空间下的 sqlDependency类 可以实现这样的功能:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发dependency_OnChange()事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的.

如下介绍实现方法及其中可能会遇到的问题。

首先,建立一个一个数据库 并在其中建立一张表,如下图所示:

表中的内容如下:

接下来 在VS2012中建立一个C#控制台应用程序,实现表的内容的监控,当表的数据发生变化时, 控制台会实时输出变化。控制台应用程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data; namespace SqlDependencyDemo
{
class Program
{
private static string _connStr;
static void Main(string[] args)
{
_connStr = "Data Source =(local);Database = DBforStudy; UID = sa; Pwd = sa";
SqlDependency.Start(_connStr);//传入连接字符串,启动基于数据库的监听
UpdateGrid(); Console.Read();
} private static void UpdateGrid()
{
using (SqlConnection connection = new SqlConnection(_connStr))
{
//依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]
using (SqlCommand command = new SqlCommand("select USERS,PASSWORD From dbo.T_USERS", connection))
{
command.CommandType = CommandType.Text;
connection.Open();
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); SqlDataReader sdr = command.ExecuteReader();
Console.WriteLine();
while (sdr.Read())
{
Console.WriteLine("USERS:{0}\tPASSWORD:{1}\t", sdr["USERS"].ToString(), sdr["PASSWORD"].ToString());
}
sdr.Close();
}
}
} private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
UpdateGrid();
}
}
}

运行程序,这个过程中可能会抛出错误:

“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker”

在数据库中新建查询:输入如下代码:

--语法为:SELECT is_broker_enabled FROM sys.databases WHERE name = 'DATABSE_NAME' --DATABASE_NAME 为数据库名称 此处为 DBforStudy
SELECT is_broker_enabled FROM sys.databases WHERE name = 'DBforStudy'

然后,执行完上一句话之后,再次只执行下面的这句话:

ALTER DATABASE DBforStudy  SET ENABLE_BROKER;

这时,再次运行

SELECT is_broker_enabled FROM sys.databases WHERE name = 'DBforStudy'

返回的结果变成了1

然后再次运行C#控制台应用程序,效果如下:

此时,不要关闭控制台应用程序,往数据库的表中写入数据,比如 我添加两行数据 0000,0000;1111,1111;

可见 每一次添加数据时 控制台就相应输出了新添加的内容。

[转]SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视的更多相关文章

  1. sql server 查询分析器中表名无效,有红线,其实是这张表的

    ctrl+shift+R 就OK了,就是刷新本地缓存.

  2. SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中

    最近,电脑重装系统之后,安装了SQL Server 2008.附加数据库文件的时候,发现无法附加,提示版本不对.想起来,原来的数据库版本是SQL Server 2008R2.低版本的数据库管理工具无法 ...

  3. 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

    原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...

  4. vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库

    use localdb sometime is easy than sql server ,and always use visual studio make you stupid. vs2012中还 ...

  5. [原创]SQL SERVER 2008R2 技术总结专题目录索引

    前言:      在工作中使用了SQL SERVER 2008R2已经很长一段时间了,工作中自己也有个蛮好的习惯:总是喜欢将碰到的一些问题.技术方案等记录下来,现在越积越多,最近也比较轻松了,准备整理 ...

  6. Sql Server 2008R2版本中有关外键Foreign的使用

    原文:Sql Server 2008R2版本中有关外键Foreign的使用 1. 在数据库设计的过程中往往会想让2张表进行关联而使用到Foreign从而加强2张表之间的约束(如图) 以前有个问题一直没 ...

  7. sql server 2008R2无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...

  8. SQL SERVER 2008R2 安装问题

    背景   今天帮可以安装数据库.操作系统是windows server 2012 标准版,  安装SQL SERVER 2008R2 . 运行安装程序,提示如下   这是因为两者之间存在兼容性问题. ...

  9. [转]无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT

    无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT,这个还有点麻烦,所以记录一下,下次遇到省得绕弯路.进入正题: ...

随机推荐

  1. HandlerMethodArgumentResolver完美解决 springmvc注入参数多传报错

    作为一个后端开发,能友好兼容前端参数传入错误等问题,在前端发布不小心多传一个参数导致系统错误的问题,一个广告系统是零容忍的,所以为了不犯错误,后端接收参数必须摒弃spring 的自动注入@Reques ...

  2. scala学习(4)---Array定长数组操作

    ScalaArrayNote: https://www.jianshu.com/p/d906f00c05bf

  3. 百度人脸识别java html5

    1.前端thymeleaf+h5 index.html    人脸识别+定位,用的百度sdk <!DOCTYPE html> <html xmlns="http://www ...

  4. memory management Vulkan

    https://www.youtube.com/watch?v=rXSdDE7NWmA vulkan 1. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COH ...

  5. win10 出现 No AMD graphics driver is installed or the AMD driver is not functioning properly .....

    原因:win10的自动更新的功能没有关闭,更新有时候会出现显卡驱动更新不及时出现的问题. 解决方法一:使用 驱动人生(或者等等....) 进行升级驱动. 解决方法二:手动升级. 1.打开设备管理器 2 ...

  6. thinkphp5.1整合swoole

    该方法仅作一种思路参考,实际应用也许会破坏thinkphp5.1的路由功能,并带来诸多问题,请读者尽量按照tp5.1官方的技术整合手段进行,按照tp5.1官方用户手册的方法可以实现swoole 风格的 ...

  7. 编译参数(-D)

    程序中可以使用#ifdef来控制输出信息 #include<stdio.h> #define DEBUG int main() { ; ; int sum = a + b; #ifdef ...

  8. Java并发之同步工具类

    1. CountDownlatch(计数器) 描述: 一个同步工具类,允许一个或多个线程等待其它线程完成操作 类图 通过指定的count值进行初始化,调用await方法的线程将被阻塞,直到count值 ...

  9. CF1207B

    CF1207B-Square Filling 题意: 两个矩阵a,b,已知矩阵b,每次能修改b矩阵中相邻的四个格(b为空矩阵),使b变为a 解法: 枚举矩阵中的1,按题意修改,并把改过的四个点都标记一 ...

  10. mybatis 语句中where 后边要跟必要条件和多个选择条件处理方法

    <select id="serchRelation" resultType="Relation">SELECTr.node_one as nodeO ...