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 多线程中集合数据同步(转) 集合类通常不是线 ...
随机推荐
- java面试题复习(六)
51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...
- Caused by: javax.persistence.NonUniqueResultException: result returns more than one elements
Caused by: javax.persistence.NonUniqueResultException: result returns more than one elements at org. ...
- HTTP和HTTPS协议,看一篇就够了
https://blog.csdn.net/xiaoming100001/article/details/81109617 因为http请求是无状态的,所以需要三次握手.四次挥手来确定状态. 大纲 这 ...
- ActiveMq Windows 配置优化
最近ActiveMQ 5.15.3 会报 OutofMemory的错误 在 wrapper.conf中 #wrapper.java.additional.8=-Dorg.apache.activemq ...
- 利用PIL创建验证码
1. 随机生成rgb 元组 def random_RGB(min, max): return tuple([random.randint(min, max) for i in range(3)])2. ...
- 第一周pta作业1总结
查找整数 本题要求从输入的N个整数中查找给定的X.如果找到,输出X的位置(从0开始数):如果没有找到,输出"Not Found". 输入格式: 输入在第一行中给出两个正整数N(≤2 ...
- EOS源码
[EOS源码] 1.在 libraries/chain/include/eosio/chain/ 目录下. permission_level 定义如下: account_name.permissi ...
- cdn帮助链接汇集
1. 如何查看节点和站点的流量,负载和连接信息 2. cdnbest常见状态码解释 3. 如何让用户访问走最近最快的线路(分组线路) 4. cdnbest里如何查看网站是否被缓存 5. cdnbest ...
- 大数据入门到精通15--hive 对 date类型的处理
一.基础日期处理 //date 日期处理select current_date;select current_timestamp;//to_date(time) ;to_date(string)sel ...
- 聚宽获取财务数据+DataFrame写入txt
from jqdata import jy from jqdata import * #获取股票列表,这里是板块内股票 pool=get_industry_stocks(',date='2016-09 ...