C#数据同步中基本步骤和用到的相关函数

数据同步对比步骤:

1.将两数据库中对应的数据表分别生成XML文件

  1. /// <summary>
  2. /// 将一个DataTable以xml方式存入指定的文件中
  3. /// </summary>
  4. /// <param name="dt"></param>
  5. /// <param name="filePath"></param>
  6. public void SaveDataTableToXml(DataTable dt, string filePath)
  7. {
  8. //创建文件夹
  9. if (!Directory.Exists(Path.GetDirectoryName(filePath)))
  10. {
  11. Directory.CreateDirectory(Path.GetDirectoryName(filePath));
  12. }
  13.  
  14. DataSet ds = new DataSet();
  15. ds.Tables.Add(dt.Copy());
  16. ds.WriteXml(filePath);
  17. }
  18.  
  19. /// <summary>
  20. /// 从一个指定的文件中读取DataTable
  21. /// </summary>
  22. /// <param name="filePath"></param>
  23. public DataTable ReadDataTableFromXml(string filePath)
  24. {
  25. DataSet ds = new DataSet();
  26. ds.ReadXml(filePath);
  27. if (ds.Tables.Count > )
  28. {
  29. return ds.Tables[];
  30. }
  31. else
  32. {
  33. return null;
  34. }
  35. }

2.上传要对比的XML数据文件到服务器端或者是从服务器下载XML文件到本地

C#Sockect异步传送或者WebClient方式传送

3.对比要同步的数据资料

  1. /// <summary>
  2. /// 对比文件
  3. /// </summary>
  4. /// <param name="localFile">本地文件</param>
  5. /// <param name="remoteFile">远程文件</param>
  6. /// <returns></returns>
  7. private bool FileCompare(string localFile, string remoteFile)
  8. {
  9. int localFilebyte;
  10. int remoteFilebyte;
  11. FileStream localFileStream;
  12. FileStream remoteFileStream;
  13. if (localFile == remoteFile)
  14. {
  15. return true;
  16. }
  17. localFileStream = new FileStream(localFile, FileMode.Open);
  18. remoteFileStream = new FileStream(remoteFile, FileMode.Open);
  19. if (localFileStream.Length != remoteFileStream.Length)
  20. {
  21. localFileStream.Close();
  22. remoteFileStream.Close();
  23. return false;
  24. }
  25. do
  26. {
  27. localFilebyte = localFileStream.ReadByte();
  28. remoteFilebyte = remoteFileStream.ReadByte();
  29. }
  30. while ((localFilebyte == remoteFilebyte) && (localFilebyte != -));
  31. localFileStream.Close();
  32. remoteFileStream.Close();
  33. return ((localFilebyte - remoteFilebyte) == );
  34. }
  35. /// <summary>
  36. /// 对比数据表
  37. /// </summary>
  38. /// <param name="localDataTable">本地数据表</param>
  39. /// <param name="remoteDataTable">远程数据表</param>
  40. /// <returns></returns>
  41. public bool DataTableCompare(DataTable localDataTable, DataTable remoteDataTable)
  42. {
  43. if (localDataTable == null || remoteDataTable == null)
  44. {
  45. return false;
  46. }
  47. if (localDataTable.Rows.Count != remoteDataTable.Rows.Count)
  48. {
  49. return false;
  50. }
  51. if (localDataTable.Columns.Count != remoteDataTable.Columns.Count)
  52. {
  53. return false;
  54. }
  55. for (int i = ; i < localDataTable.Rows.Count; i++)
  56. {
  57. for (int j = ; j < localDataTable.Columns.Count; j++)
  58. {
  59. if (localDataTable.Rows[i][j].ToString() != remoteDataTable.Rows[i][j].ToString())
  60. {
  61. return false;
  62. }
  63. }
  64. }
  65. return true;
  66. }

C#数据同步中基本步骤和用到的相关函数的更多相关文章

  1. Kettle 实现mysql数据库不同表之间数据同步——实验过程

    下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...

  2. GoldenGate 12.3 MA架构介绍系列(2) - 数据同步测试

    安装配置可参考上一篇:http://www.cnblogs.com/margiex/p/8071957.html 安装完成之后,会自动启动ServiceManager服务,此时,可以通过浏览器访问. ...

  3. canal数据同步目录

    我们公司对于数据同步有以下需求 1.多个mysql库中有一些基础表需要数据统一,mysql跨库同步 2.mysql热数据加载到redis 3.全文检索需要mysql同步到es 4.数据变更是附属的其它 ...

  4. 【uwp】浅谈China Daily中数据同步到One Drive的实现

    新版China Daily与旧版相比新增了数据同步的功能,那这个功能具体是如何实现的呢,现在让我们来一起看看. 1.注册应用 开发者中心的应用注册就不用多说了(https://developer.mi ...

  5. 将SQLServer2005中的数据同步到Oracle中

    有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...

  6. Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)

    今天试验了如何在Kettle的图形界面(Spoon)下面来整合来mysql 数据库中位于不同数据库中的数据表中的数据. 试验用的数据表是customers: 第三方的数据集下载地址是:http://w ...

  7. oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中

    有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...

  8. SQL Server 2008中的MERGE(数据同步)

    OK,就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演 ...

  9. C# .net 多线程中集合数据同步

    from:http://www.cnblogs.com/GavinCome/archive/2008/04/09/1145250.html C# .net 多线程中集合数据同步(转) 集合类通常不是线 ...

随机推荐

  1. 利用EventHandler系统委托,触发Event

                   最近一直在研究委托与事件,下面是我的个人理解 NOTE:参考了张子阳的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archi ...

  2. dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误

    dubbo Please check registry access list (whitelist/blacklist) dubbo服务调用provider失败.解决办法: 再consumer的服务 ...

  3. python_13 面向对象

    面向对象 类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象的概念 对象:就是基于类出而创建的一个具体的事物或实例(具体存在),其特征和动作整合到一起 面向对象设计:将一类具体事物的数据和动 ...

  4. ESLint具体规则设置

    "no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...

  5. Hadoop HDFS常用命令

    1.查看hdfs文件目录 hadoop fs -ls / 2.上传文件 hadoop fs -put 文件路径 目标路径 在浏览器查看:namenodeIP:50070 3.下载文件 hadoop f ...

  6. Linux网络编程学习(七) ----- 有名管道(第四章)

    1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...

  7. Linux gzip命令

    语法: gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-acdfhlLnN ...

  8. python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域

    复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参:       -- 形参:在函数定义时()中出现的参数       ...

  9. docker原理(转)

    可能是把Docker的概念讲的最清楚的一篇文章 [编者的话]本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令. Docker是世 ...

  10. jQuery之遍历索引相关方法

    遍历索引相关方法: .each(),补充.children() .index() 1 .each() 2..children() .index()