[转]SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视
转自: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 机制实现 数据库中某一张表的监视的更多相关文章
- sql server 查询分析器中表名无效,有红线,其实是这张表的
ctrl+shift+R 就OK了,就是刷新本地缓存.
- SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中
最近,电脑重装系统之后,安装了SQL Server 2008.附加数据库文件的时候,发现无法附加,提示版本不对.想起来,原来的数据库版本是SQL Server 2008R2.低版本的数据库管理工具无法 ...
- 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...
- vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库
use localdb sometime is easy than sql server ,and always use visual studio make you stupid. vs2012中还 ...
- [原创]SQL SERVER 2008R2 技术总结专题目录索引
前言: 在工作中使用了SQL SERVER 2008R2已经很长一段时间了,工作中自己也有个蛮好的习惯:总是喜欢将碰到的一些问题.技术方案等记录下来,现在越积越多,最近也比较轻松了,准备整理 ...
- Sql Server 2008R2版本中有关外键Foreign的使用
原文:Sql Server 2008R2版本中有关外键Foreign的使用 1. 在数据库设计的过程中往往会想让2张表进行关联而使用到Foreign从而加强2张表之间的约束(如图) 以前有个问题一直没 ...
- sql server 2008R2无人值守批处理脚本自动化安装
▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...
- SQL SERVER 2008R2 安装问题
背景 今天帮可以安装数据库.操作系统是windows server 2012 标准版, 安装SQL SERVER 2008R2 . 运行安装程序,提示如下 这是因为两者之间存在兼容性问题. ...
- [转]无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT
无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT,这个还有点麻烦,所以记录一下,下次遇到省得绕弯路.进入正题: ...
随机推荐
- Ubuntu18.04安装OpenCV4.1.0
Ubuntu18.04安装OpenCV4.1.0 1.首先要安装依赖 sudo apt-get install build-essential \ cmake git libgtk2.0-dev pk ...
- 快速排序详解(lomuto划分快排,hoare划分快排,classic经典快排,dualpivot双轴快排源码)
目录 快速排序(lomuto划分快排,hoare划分快排,classic经典快排,dualpivot双轴快排) 一.快速排序思想 二.划分思想 三.测试用例 快速排序(lomuto划分快排,hoare ...
- PAT Basic 1064 朋友数 (20 分)
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号.给定 ...
- eclipse设置打开java文件目录
1. 第一步: 2. 第二步: 3. 第三步: Location:C:/WINDOWS/explorer.exe Arguments:${container_loc}
- R中数据的输入和数据的标注
数据的导入 默认情况下数据导入时,字符型变量将转化为因子.若不希望转化,可设置 stringsAsFactors=FALSE 从带分隔符的文本文件中导入数据 read.table() file --& ...
- 创建一个新的laravel
//创建laravelcomposer create-project laravel/laravel shop 安装好 Laravel 之后的下一步是设置你的应用密钥为随机字符串.如果你通过 comp ...
- 单例模式(Singleton)---创建型
1 单例模式的使用场景 (1)当创建一个对象所占用的资源很多,但同时又需要使用到该对象 (2)当堆系统内的资源要求统一读写时,比如读写的配置信息,此时必须要求创建的实例信息相同 (3)当有多个实例可能 ...
- 通俗理解数字签名,ssl数字证书和https
前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖 PDF合同在签章后不 ...
- learning strrchr func
函数名称: strrchr 函数原型:char *strrchr(const char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str中末次出现 ...
- [Luogu] 次小生成树
https://www.luogu.org/problemnew/show/P4180#sub 严格次小生成树,即不等于最小生成树中的边权之和最小的生成树 首先求出最小生成树,然后枚举所有不在最小生成 ...