SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视
来源:互联网 发布:农业技术网络书屋 编辑:程序博客网 时间:2024/05/21 22:24
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'
此时返回的 is_broker_enabled de 结果是 0,
不要担心这个错误是因为数据库没有启动 Service Broker而导致的,解决办法很简单,步骤如下:
在上面新建查询中 把 单单执行下面这句话:
use DBforStudygoALTER DATABASE DBforStudy SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE DBforStudy SET ENABLE_BROKER;
这时,再次运行
SELECT is_broker_enabled FROM sys.databases WHERE name = 'DBforStudy'
返回的结果变成了1
然后再次运行C#控制台应用程序,效果如下:
此时,不要关闭控制台应用程序,往数据库的表中写入数据,比如 我添加两行数据 0000,0000;1111,1111;
可见 每一次添加数据时 控制台就相应输出了新添加的内容。
阅读全文
0 0
- SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- 关于SQL中,C#监视某张表SqlDependency学习笔记 .
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- SQL将一个数据库的某一张表移动到另外一个数据库中(表的结构不变)
- sql server 查询一个数据库中有多少张表
- 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
- SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
- SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中
- sql server 2008 R2的sql server中(SQL Server(MSSQLSERVER))服务不能启动
- 检测数据库中是否存在某一张表
- 关于SQL中,C#监视某张表SqlDependency学习笔记 (转)
- 使用SqlDependency监测SQL Server 2005/2008字段改动时的SQL语法及相关注意事项
- 在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。
- sql server 2005中如何查询一个数据库中有多少张表?
- 详细解释《机器学习实战》第5章logistic回归 第5-1程序(梯度下降法推导)和梯度下降法实现对率回归
- 华为在线机试-计算字符个数
- 观察者模式
- 进制转换
- Laravel 中用户认证(Auth)
- SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视
- openGL ES进阶教程(六)美颜滤镜之美白,磨皮,红润
- Python学习笔记之运算符之一
- 抽象工厂与工厂模式例子
- sci\ei国内计算机类学术期刊
- 微信公众号开发遇到的问题归纳整理
- bumblebee默认打开独立显卡
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第二周:神经网络基础)
- Github上的几个C++开源项目