使用SqlDependency类及利用SQL2008的Service Broker来检测数据改动的实现
来源:互联网 发布:数据库查询结果转json 编辑:程序博客网 时间:2024/05/20 14:16
sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的.
1.创建一个测试数据库map,新建一个表Users,添加一些数据
查询刚刚创建的数据库是否支持启用Broker功能:(注:默认情况下新创建的数据库会启用Broker功能)
在SQL中,新建查询- 输入以下代码:Select DATABASEpRoPERTYEX(''map'',''IsBrokerEnabled'') -执行(map为数据库名称)
-- 1表示已经启用 0表示没有启用
如果结果为0表示此数据库没有启用Broker功能,执行下面的代码来启用
ALTER DATABASE map SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE map SET ENABLE_BROKER;
.2、控制台程序主要代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration; using System.Data; using System.Data.SqlClient;namespace ConsoleApplication1{ class Program { private static string _connStr; static void Main(string[] args) { _connStr = System.Configuration.ConfigurationManager.ConnectionStrings["testconect"].ToString(); SqlDependency.Start(_connStr);//传入连接字符串,启动基于数据库的监听 UpdateGrid(); Console.Read(); } private static void UpdateGrid() { using (SqlConnection connection = new SqlConnection(_connStr)) { //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[] using (SqlCommand command = new SqlCommand("select U_Name,U_power,U_Tel From [dbo].[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("Id:{0}\tUserId:{1}\tMessage:{2}", sdr["U_Name"].ToString(), sdr["U_power"].ToString(),sdr["U_Tel"].ToString()); } sdr.Close(); } } } private static void dependency_OnChange(object sender, SqlNotificationEventArgs e) { UpdateGrid(); } }}
3.测试运行
运行该控制台程序后,会输出Users表的所有数据,这时不要关闭控制台程序,直接在Sql2008的管理器里对Users表的数据做些修改(比如新增/删除等),再看一下控制台,会发现自动重新输出了新的数据.
若出现:使用SqlDependency时提示当前数据库未启用Service broker,参考第一步- ALTER DATABASE 数据库名称SET NEW_BROKER WITHROLLBACK IMMEDIATE;
- ALTER DATABASE 数据库名称SET ENABLE_BROKER;
注意:
使用 SqlDependency 订阅查询通知必须向SQL Server Service Broker提供制定规则的查询语句,一般来讲,必须是简单的sql查询语句(不能用*,不能用top,不能用函数,包括聚合函数,不能用子查询,包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变量,不能用视图,不能垮库,表名之前必须加类似dbo数据库所有者这样的前缀)例如:select * from table1,select column1 from table1,select count(*) from table1 都是错误的sql查询语句,select column1 from dbo.table1 则是正确的语句。
- 使用SqlDependency类及利用SQL2008的Service Broker来检测数据改动的实现
- 使用SqlDependency类及利用SQL2008的Service Broker来检测数据改动的实现(二)
- Service Broker 的实现
- 使用SqlDependency监测SQL Server 2005/2008字段改动时的SQL语法及相关注意事项
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 实现远程服务器的Service Broker
- 对于sqldependency类的使用(通过它来监听数据库的变化)
- 实现SQL2008 Reporting Service的表单验证
- Service Broker的基本概念及建立一个Service Broker应用程序的基本步骤
- 使用 Messenger 来实现Service的双向通信
- 学习使用 SQL Server2005 中 Service Broker的一点感受
- 关于数据库恢复后Service Broker不能使用的问题
- C#实现的多阶幻方,由C改动而来
- cordova 实现第三方登录及分享,qq,微信,微博,插件的使用和改动
- cordova 实现第三方登录及分享,qq,微信,微博,插件的使用和改动
- (8) cocos2d-x中相关的一些C++函数
- 激活Maven profile的几种方式
- UITableView reloadData的正确方法
- 【PAT】1086. Tree Traversals Again (25)
- Emacs 学习笔记
- 使用SqlDependency类及利用SQL2008的Service Broker来检测数据改动的实现
- intel media SDK ----摘自ww506772362的专栏
- JS 需要一个JavaScript 的API 希望有的朋友帮下忙,邮箱1360737271@qq.com
- Android LayoutInflater详解
- 软件测试常见的智力题
- 洪涛-2014:分化的国内手游市场
- Myeclipse搭建Maven
- 在Spring中使用Hessian Remoting技
- lua中的require机制