数据同步对比步骤:
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 > 0)
{
return ds.Tables[0];
}
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 != -1));
localFileStream.Close();
remoteFileStream.Close();
return
((localFilebyte - remoteFilebyte) == 0);
}
/// <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
= 0; i < localDataTable.Rows.Count; i++)
{
for (int j = 0; j < localDataTable.Columns.Count; j++)
{
if (localDataTable.Rows[i][j].ToString() !=
remoteDataTable.Rows[i][j].ToString())
{
return false;
}
} }
return true;
}