C#数据同步中基本步骤和用到的相关函数
數(shù)據(jù)同步對(duì)比步驟:
1.將兩數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)表分別生成XML文件
???????? /// <summary>
??????? /// 將一個(gè)DataTable以xml方式存入指定的文件中
??????? /// </summary>
??????? /// <param name="dt"></param>
??????? /// <param name="filePath"></param>
??????? public void SaveDataTableToXml(DataTable dt, string filePath)
??????? {
??????????? //創(chuàng)建文件夾
??????????? if (!Directory.Exists(Path.GetDirectoryName(filePath)))
??????????? {
??????????????? Directory.CreateDirectory(Path.GetDirectoryName(filePath));
??????????? }
??????????? DataSet ds = new DataSet();
??????????? ds.Tables.Add(dt.Copy());
??????????? ds.WriteXml(filePath);
??????? }
??????? /// <summary>
??????? /// 從一個(gè)指定的文件中讀取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.上傳要對(duì)比的XML數(shù)據(jù)文件到服務(wù)器端或者是從服務(wù)器下載XML文件到本地
??????? C#Sockect異步傳送或者WebClient方式傳送
?
3.對(duì)比要同步的數(shù)據(jù)資料
???????? /// <summary>
??????? /// 對(duì)比文件
??????? /// </summary>
??????? /// <param name="localFile">本地文件</param>
??????? /// <param name="remoteFile">遠(yuǎn)程文件</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>
??????? /// 對(duì)比數(shù)據(jù)表
??????? /// </summary>
??????? /// <param name="localDataTable">本地?cái)?shù)據(jù)表</param>
??????? /// <param name="remoteDataTable">遠(yuǎn)程數(shù)據(jù)表</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;
??????? }
?
轉(zhuǎn)載于:https://www.cnblogs.com/splendidme/archive/2011/08/25/2153249.html
總結(jié)
以上是生活随笔為你收集整理的C#数据同步中基本步骤和用到的相关函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU2188-Bash博弈
- 下一篇: 18、正则表达式中常用字符