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#数据同步中基本步骤和用到的相关函数的更多相关文章

  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. zookeeper、solrcloud、rediscluster集群解决方案

        集群解决方案 课程目标 目标1:说出什么是集群以及与分布式的区别 目标2:能够搭建Zookeeper集群 目标3:能够搭建SolrCloud集群 目标4:能够搭建RedisCluster集群 ...

  2. 9Linux_LVM_iptables

    LVM 创建物理卷 卷组 逻辑卷 格式化 挂载 扩容 缩小 快照 删除逻辑卷

  3. Laravel 5.3 单用户登录的简单实现

    需求 一个用户不能重复登录. 后登录者可以踢掉前者. 设计思路: 核心概念 用户ID: 是用户表主键 singleToken 算法: singleToken = md5(用户IP + 用户ID + 登 ...

  4. python的车牌号的检测

    自己总结一下,从网上找到的关于车牌号的识别的一些博文.https://www.jianshu.com/p/fcfbd3131b84 https://www.cnblogs.com/do-hardwor ...

  5. mysql修改联合主键

    参考 https://blog.csdn.net/BockSong/article/details/80933477 alter table TABNAME drop primary key; alt ...

  6. hibernate多生成一个外键以及映射文件中含有<list-index>标签

    (原文地址: http://blog.csdn.net/xiaoxian8023/article/details/15380529) 一.Inverse是hibernate双向关系中的基本概念.inv ...

  7. vue 配置了全局的http拦截器,单独某个组件不需要这个拦截器,如何设置

    之前写过关于全局配置http拦截器的随笔,现在有个需求,在微信支付时,生成二维码,页面显示一个遮罩层,二维码页面需要每两秒请求一次接口,若返回结果为已支付,则进行页面跳转,但因为全局http中load ...

  8. HashMap、Hashtable、ConcurrentHashMap的原理与区别(简述)

    HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相 ...

  9. MongoDB设置连接池操作百万级以上数据

    开发环境 spring 4.3.7 + springBoot 1.5.2 + dubbo 2.6.5 + mongoDB 4.0.0 连接池配置 mongo-pool.properties sprin ...

  10. 20175234 2018-2019-2 《Java程序设计》第七周学习总结

    目录 20175234 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 String类常用用法 Date类与Calendar类常用用法 Math类的常用方法 ...