做ETL的时候用到的数据同步更新代码
这里是用的从一个库同步到另一个库,代码如下
private void IncrementalSyncUpdate(string fromConn, string toConn, Dictionary<string, string> sqlList)
{
var sw = new Stopwatch(); using (var conn = new SqlConnection(fromConn))
{
if (conn.State != ConnectionState.Open) conn.Open(); using (var cmd = new SqlCommand())
{
try
{
foreach (var item in sqlList)
{
var sql = item.Value; var tableName = item.Key; sw.Restart(); cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn; DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); if (dt.Rows.Count == ) continue;//如果没有新增数据,跳过 foreach (DataRow row in dt.Rows)
{
row.SetModified();
} int updateCount = ; using (var TmpConn = new SqlConnection(toConn))
{
if (TmpConn.State != ConnectionState.Open) TmpConn.Open(); using (var tmpCmd = new SqlCommand())
{
tmpCmd.CommandText = "select * from Meb_" + tableName;
tmpCmd.CommandType = CommandType.Text;
tmpCmd.Connection = TmpConn;
SqlDataAdapter tmpSda = new SqlDataAdapter(tmpCmd); SqlCommandBuilder scb = new SqlCommandBuilder(tmpSda);
tmpSda.UpdateCommand = scb.GetUpdateCommand();
updateCount = tmpSda.Update(dt); }
} sw.Stop(); Console.WriteLine("增量同步数据更新完成,表名:{0},数据{1}条,耗时{2}秒", tableName, updateCount, sw.Elapsed.TotalSeconds);
}
}
catch (Exception e)
{
Console.WriteLine("增量同步数据同步更新失败," + e.ToString());
}
}
}
}
这个sqllist是一个 Key:表名 Value:查询SQL ,做增量同步查询的,主要根据时间戳来获取时间。
用SqlAdapter的Update方法来做更新,这里有个问题,在更新的DataTable里面的数据要对DataRow的RowState进行一个设置,如果是未设置,那么Update过后,数据库是没有变化的。
做ETL的时候用到的数据同步更新代码的更多相关文章
- iOS开发NSFetchedResultsController的使用CoreData和TableView数据同步更新
1.效果 2.代码 #import "ViewController.h" #import "Student+CoreDataProperties.h" #def ...
- ETL工具 (二)sqoop 数据同步工具
Sqoop简介 将关系数据库(oracle.mysql.postgresql等)数据与hadoop数据进行转换的工具. 官网: http://sqoop.apache.org/ 版本:(两个版本完全不 ...
- canal数据同步 客户端代码实现
1.引入相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId ...
- [转]实现Hive数据同步更新的shell脚本
引言: 上一篇文章<Sqoop1.4.4 实现将 Oracle10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表>http://www.linuxidc.com/Li ...
- swift中利用系统线程实现异步加载数据同步更新UI
swift中的使用案例样式 // Mark: -数据源更新 typealias AddDataBlock = () ->Void var updataBlock:AddDataBlock? fu ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第五篇:logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
文章转载自: https://blog.csdn.net/laoyang360/article/details/51747266 引言: elasticsearch 的出现使得我们的存储.检索数据更快 ...
- 【转】mysql 触发器实现两个表的数据同步
mysql通过触发器实现两个表的同步 目前,在本地测试成功. 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更 ...
- Eureka应用注册与集群数据同步源码解析
在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean r ...
- Vue.js的列表数据的同步更新方法
这次给大家带来Vue.js的列表数据的同步更新方法,Vue.js列表数据同步更新方法的注意事项有哪些,下面就是实战案例,一起来看一下. 数组的 push(),pop(),shift(),unshift ...
随机推荐
- 南阳OJ 1170 最大的数
最大的数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个数 在这n个数 ...
- java图形用户界面练习。j2se
总结:主要是如何布局.还是存在很大问题 package clientFrame; import java.awt.FlowLayout; import javax.swing.JButton; imp ...
- crush class实验
标签(空格分隔): ceph,ceph实验,crushmap luminous版本的ceph新增了一个功能crush class,这个功能又可以称为磁盘智能分组.因为这个功能就是根据磁盘类型自动的进行 ...
- elasticsearch5.6.8中文分词器
安装分词器,务必确保版本一致! 下载地址:https://github.com/medcl/elasticsearch-analysis-ik 为了保证一致,我特地将elasticsearch进行降级 ...
- 一.lock的使用
使用ReentrantLock类 ReentrantLock类在扩展功能上更加强大,比如嗅探锁定,多路分支通知.而且在使用上也比synchronized更加灵活 调用ReentrantLock对象的l ...
- leetcode821
vector<int> shortestToChar(string S, char C) { vector<int> V; ; int AYC[N]; ; ; i < S ...
- BurpSuite—-decoder模块(编码模块)
一.简介 Burp Decoder是Burp Suite中一款编码解码工具,将原始数据转换成各种编码和哈希表的简单工具,它能够智能地识别多种编码格式采用启发式技术. 二.模块说明 通过有请求的任意模块 ...
- ActiveX每次网页打开提示活动内容运行
(2) 设置允许活动内容运行. 在启动调试,网页经常会呈现如下提示框,每次都要确认,很麻烦. 以下方法可以消除这个提示框. 在IE中打开Internet 选项对话框,选择高级选项卡,勾选里 ...
- Python基础学习三 文件操作(一)
文件读写 r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[不可读: 不存在则创建:存在则只追加内容:] r+,[可读.可写:可追加,如果打开的文件不存 ...
- sonarLint 插件配置sonarQube Server
Connected Mode You can bind Eclipse projects to a SonarQube project (supporting SonarQube servers 5. ...