Web重温系列(三):OracleDependency实现监听数据库变化
有个小项目(后来由另一个小组以Java开发了),内容是监控一个Oracle数据库。如果其中一个表A有数据变动,则需要将相关内容重组后通过接口发送给B。
通常的解决办法是定时查询,时间间隔可以小一点,还可以加上时间戳之类的,减少查询量。在与经常访问数据库的同事聊的过程,发现通过监听数据库的变动也是一种可行方案,于是准备尝试一下。
查了一下,.Net对自己家SQL Server的监听用的是SQLDependency类,而Oracle的相应实现则是OracleDependency类,这个应该是ODP.Net的一部分。
操作流程如下:
- 安装Oracle Developer Tools for Visual Studio
下载页面时https://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html,下载前请确认自己的Visual Studio版本,我的2015;
2. 在VS中创建项目,并利用NuGet包管理器安装Oracle.ManagedDataAccess
3. 完善配置文件(特别是连接串)
创建ADO.Net实体模型,选择Oracle 数据库 (ODP.NET, 托管驱动程序),然后选择TN或者ET方式链接。果是ET方式,输入服务器、端口、用户名和密码,创建成功后,连接字符串就自动设置好了;
4. 创建命令并设置监听如下
其中Properties.Settings.Default.OracleDevConnStr是连接字符串名字
OracleConnection con1 = new OracleConnection(Properties.Settings.Default.OracleDevConnStr);
var sql = "select * from ZQ";
OracleCommand cmd1 = new OracleCommand(sql, con1);
con1.Open();
cmd1.AddRowid = true;
OracleDependency dep = new OracleDependency(cmd1);
cmd1.Notification.IsNotifiedOnce = false;
dep.OnChange += OnDbChange;
5. 处理OnDbChange事件
private void OnDbChange(object sender, OracleNotificationEventArgs eventArgs)
{
//TODO:...
}
此外,如果阅读英文无障碍,可以查看如下链接https://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/changenotification/odpnetchg_otn.htm。
Web重温系列(三):OracleDependency实现监听数据库变化的更多相关文章
- Android简易实战教程--第二十一话《内容观察者监听数据库变化》
当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...
- ContentObserver监听数据库·变化
//短信Uri Uri smsUri = Uri.parse("content://sms"); //使用ContentReslover注册·监听器 getContentResol ...
- linkedin databus介绍——监听数据库变化,有新数据到来时通知其他消费者app,新数据存在内存里,多份快照
概要结构如下图. 图中显示:Search Index和Read Replicas等系统是Databus的消费者.当主OLTP数据库发生写操作时,连接其上的中继系统会将数据拉到中继中.签入在Search ...
- debezium监听数据库变化Date类型数据的还原
debezium是一个开源的分布式CDC系统,支持对接各种数据源,将数据源中已持久化的数据变更捕获后写入消息队列. 当数据源是mysql时,debezium通过BINLOG实时捕获已提交事务数据. 在 ...
- mvc 缓存 sqlCacheDependency 监听数据变化
mvc 缓存 对于MVC有Control缓存和Action缓存. 一.Control缓存 Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来 ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- iOS开发之--为UITextField监听数值变化的三种方法
项目中有个验证码输入直接验证跳转页面,用的RAC来监听textfield的输入值,如下: @weakify(self); [self.codeView.textField.rac_textSignal ...
- $scope.$watch()——监听数据变化
$scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
随机推荐
- idea中Hibernate反向生成工具
HIbernate反向生成工具 1.使用idea数据库集成工具连接所需数据库 第一步 View-->Tool windows---->Database 第二步 找到所需连接的数据库 第三步 ...
- Markdown指南
Markdown 指南 前几天学习了markdown,然后一直在用,很喜欢这种格式即内容的写作形式.在简书写了几篇,对固定链接的格式很不满意,于是寻找能够支持markdown.固定链接显格式.支持自定 ...
- React动画组件——React-Transitio-group动画实现
React动画组件--React-Transitio-group动画实现 安装 项目目录下使用命令行 yarn add react-transition-group 安装组件.在需要使用动画的页面加入 ...
- [原创]浅谈Web UI自动化测试
[原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...
- .net 多态
https://espider.github.io/CLR/inheritance-polymorphism/
- CSS魔法堂:一起玩透伪元素和Content属性
前言 继上篇<CSS魔法堂:稍稍深入伪类选择器>记录完伪类后,我自然而然要向伪元素伸出"魔掌"的啦^_^.本文讲讲述伪元素以及功能强大的Contet属性,让我们可以通 ...
- wriesharek同时监听多个端口
之前的文章<wireshark解析自定义的protobuf协议> ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢? for i, ...
- hibernate JPA 使用懒加载时代理对象
hibernate延迟加载代理对象实际对象读取方式 public static <T> T deproxy (T obj) { if (obj == null) return obj; i ...
- redis sentinel 读写分离
redis sentinel 读写分离 https://www.jianshu.com/p/d1636776bb40
- mybatis 批量添加
<insert id="addTrackBatch" parameterType="java.util.List"> INSERT INTO t_t ...