C#数据同步中基本步骤和用到的相关函数
C#数据同步中基本步骤和用到的相关函数
数据同步对比步骤:
1.将两数据库中对应的数据表分别生成XML文件
- /// <summary>
- /// 将一个DataTable以xml方式存入指定的文件中
- /// </summary>
- /// <param name="dt"></param>
- /// <param name="filePath"></param>
- public void SaveDataTableToXml(DataTable dt, string filePath)
- {
- //创建文件夹
- if (!Directory.Exists(Path.GetDirectoryName(filePath)))
- {
- Directory.CreateDirectory(Path.GetDirectoryName(filePath));
- }
- DataSet ds = new DataSet();
- ds.Tables.Add(dt.Copy());
- ds.WriteXml(filePath);
- }
- /// <summary>
- /// 从一个指定的文件中读取DataTable
- /// </summary>
- /// <param name="filePath"></param>
- public DataTable ReadDataTableFromXml(string filePath)
- {
- DataSet ds = new DataSet();
- ds.ReadXml(filePath);
- if (ds.Tables.Count > )
- {
- return ds.Tables[];
- }
- else
- {
- return null;
- }
- }
2.上传要对比的XML数据文件到服务器端或者是从服务器下载XML文件到本地
C#Sockect异步传送或者WebClient方式传送
3.对比要同步的数据资料
- /// <summary>
- /// 对比文件
- /// </summary>
- /// <param name="localFile">本地文件</param>
- /// <param name="remoteFile">远程文件</param>
- /// <returns></returns>
- private bool FileCompare(string localFile, string remoteFile)
- {
- int localFilebyte;
- int remoteFilebyte;
- FileStream localFileStream;
- FileStream remoteFileStream;
- if (localFile == remoteFile)
- {
- return true;
- }
- localFileStream = new FileStream(localFile, FileMode.Open);
- remoteFileStream = new FileStream(remoteFile, FileMode.Open);
- if (localFileStream.Length != remoteFileStream.Length)
- {
- localFileStream.Close();
- remoteFileStream.Close();
- return false;
- }
- do
- {
- localFilebyte = localFileStream.ReadByte();
- remoteFilebyte = remoteFileStream.ReadByte();
- }
- while ((localFilebyte == remoteFilebyte) && (localFilebyte != -));
- localFileStream.Close();
- remoteFileStream.Close();
- return ((localFilebyte - remoteFilebyte) == );
- }
- /// <summary>
- /// 对比数据表
- /// </summary>
- /// <param name="localDataTable">本地数据表</param>
- /// <param name="remoteDataTable">远程数据表</param>
- /// <returns></returns>
- public bool DataTableCompare(DataTable localDataTable, DataTable remoteDataTable)
- {
- if (localDataTable == null || remoteDataTable == null)
- {
- return false;
- }
- if (localDataTable.Rows.Count != remoteDataTable.Rows.Count)
- {
- return false;
- }
- if (localDataTable.Columns.Count != remoteDataTable.Columns.Count)
- {
- return false;
- }
- for (int i = ; i < localDataTable.Rows.Count; i++)
- {
- for (int j = ; j < localDataTable.Columns.Count; j++)
- {
- if (localDataTable.Rows[i][j].ToString() != remoteDataTable.Rows[i][j].ToString())
- {
- return false;
- }
- }
- }
- return true;
- }
C#数据同步中基本步骤和用到的相关函数的更多相关文章
- Kettle 实现mysql数据库不同表之间数据同步——实验过程
下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...
- GoldenGate 12.3 MA架构介绍系列(2) - 数据同步测试
安装配置可参考上一篇:http://www.cnblogs.com/margiex/p/8071957.html 安装完成之后,会自动启动ServiceManager服务,此时,可以通过浏览器访问. ...
- canal数据同步目录
我们公司对于数据同步有以下需求 1.多个mysql库中有一些基础表需要数据统一,mysql跨库同步 2.mysql热数据加载到redis 3.全文检索需要mysql同步到es 4.数据变更是附属的其它 ...
- 【uwp】浅谈China Daily中数据同步到One Drive的实现
新版China Daily与旧版相比新增了数据同步的功能,那这个功能具体是如何实现的呢,现在让我们来一起看看. 1.注册应用 开发者中心的应用注册就不用多说了(https://developer.mi ...
- 将SQLServer2005中的数据同步到Oracle中
有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...
- Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)
今天试验了如何在Kettle的图形界面(Spoon)下面来整合来mysql 数据库中位于不同数据库中的数据表中的数据. 试验用的数据表是customers: 第三方的数据集下载地址是:http://w ...
- oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中
有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...
- SQL Server 2008中的MERGE(数据同步)
OK,就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演 ...
- C# .net 多线程中集合数据同步
from:http://www.cnblogs.com/GavinCome/archive/2008/04/09/1145250.html C# .net 多线程中集合数据同步(转) 集合类通常不是线 ...
随机推荐
- 利用EventHandler系统委托,触发Event
最近一直在研究委托与事件,下面是我的个人理解 NOTE:参考了张子阳的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archi ...
- dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误
dubbo Please check registry access list (whitelist/blacklist) dubbo服务调用provider失败.解决办法: 再consumer的服务 ...
- python_13 面向对象
面向对象 类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象的概念 对象:就是基于类出而创建的一个具体的事物或实例(具体存在),其特征和动作整合到一起 面向对象设计:将一类具体事物的数据和动 ...
- ESLint具体规则设置
"no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...
- Hadoop HDFS常用命令
1.查看hdfs文件目录 hadoop fs -ls / 2.上传文件 hadoop fs -put 文件路径 目标路径 在浏览器查看:namenodeIP:50070 3.下载文件 hadoop f ...
- Linux网络编程学习(七) ----- 有名管道(第四章)
1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...
- Linux gzip命令
语法: gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-acdfhlLnN ...
- python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域
复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参: -- 形参:在函数定义时()中出现的参数 ...
- docker原理(转)
可能是把Docker的概念讲的最清楚的一篇文章 [编者的话]本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令. Docker是世 ...
- jQuery之遍历索引相关方法
遍历索引相关方法: .each(),补充.children() .index() 1 .each() 2..children() .index()