转自: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. IIS教程:因权限问题被拒绝访问的解决方案

    https://blog.csdn.net/a497785609/article/details/49952281 写了一个类IISAdmin,负责建立.设置.删除虚拟目录,发现在web中调用,遇到权 ...

  2. 07—mybatis注解配置一

    常用注解Select:映射查询的sql语句.SelectProvider:Select语句的动态sql映射.允许指定一个类名和一个方法在执行时返回运行的查询语句.有两个属性:type和mehtod,t ...

  3. react-router5.x 的配置及其页面跳转方法和js跳转方法

    https://blog.csdn.net/sinat_37255207/article/details/90745207 上次用react-router 的时候  还是3.x 很久不用 已经到rea ...

  4. sqlite3-python

    官网资料 https://sqlite.org/lang_createtable.html 操作参考: https://www.runoob.com/sqlite/sqlite-insert.html ...

  5. Elasticsearch7.1中文文档-第一章-入门

    安装openjdk wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-secur ...

  6. [Loj] 数列分块入门 1 - 9

    数列分块入门 1 https://loj.ac/problem/6277 区间加 + 单点查询 #include <iostream> #include <cstdio> #i ...

  7. 编译参数(-D)

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

  8. 7.19T3

    小 X 的图 题目背景及题意 小 X 有一张图,有 n 个点(从 0 开始编号),一开始图里并没有 边,他有时候会向其中添加一条双向边(x 到 y).小 X 会时不时想知 道某两个点是否联通,如果连通 ...

  9. CSS3-弹性盒布局(Flex Box)

    弹性盒布局(Flex Box) 一.概念 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型 ...

  10. 适配iphone X

    首先需要为meta标签加上viewport-fit=cover,默认viewport-fit=contain,跟background-size类似.当值设置为cover既可让安全区域铺满全屏,就跟适配 ...