/// <summary>
/// 比较srcDataTable与destDataTable,返回差异的DataTable结构与数据
/// </summary>
/// <param name="srcDataTable">源表</param>
/// <param name="destDataTable">目的表</param>
/// <param name="bBuildDelete">是否生成删除记录</param>
/// <returns></returns>
public static DataSet CompareDataSet(DataSet srcDataSet, DataSet destDataSet)
{
if (destDataSet == null || destDataSet.Tables.Count <= 0) return srcDataSet;
if (srcDataSet == null || srcDataSet.Tables.Count <= 0) return srcDataSet;
DataSet ds = new DataSet();
DataTable srcTable = srcDataSet.Tables[0].Copy();
srcTable.TableName = "table1";
DataTable destTable = destDataSet.Tables[0].Copy();
destTable.TableName = "table2";
ds.Tables.Add(srcTable);
ds.Tables.Add(destTable);
try
{
string relationName = "MidRelation";
int iColumnLen = srcTable.Columns.Count;
DataColumn[] parentDataColumn = new DataColumn[iColumnLen];
srcTable.Columns.CopyTo(parentDataColumn, 0);
DataColumn[] childDataColumn = new DataColumn[iColumnLen];
destTable.Columns.CopyTo(childDataColumn, 0);
//通过所有字段建立表间关联
DataRelation dataRelation = new DataRelation(relationName,
parentDataColumn, childDataColumn, false);
ds.Relations.Add(dataRelation);
DataRow[] drChild;
foreach (DataRow drParent in srcTable.Rows)
{
drChild = drParent.GetChildRows(dataRelation);
//如果与中间表没有对应,则表示为新增或者修改的
if (drChild == null || drChild.Length == 0) continue;
drParent.Delete();
}
srcTable.AcceptChanges();
DataSet rtnDs = new DataSet();
rtnDs.Tables.Add(srcTable.Copy());
return rtnDs;
}
catch (Exception ex)
{
throw ex;
}
finally
{
ds.Dispose();
}
}
/// 比较srcDataTable与destDataTable,返回差异的DataTable结构与数据
/// </summary>
/// <param name="srcDataTable">源表</param>
/// <param name="destDataTable">目的表</param>
/// <param name="bBuildDelete">是否生成删除记录</param>
/// <returns></returns>
public static DataSet CompareDataSet(DataSet srcDataSet, DataSet destDataSet)
{
if (destDataSet == null || destDataSet.Tables.Count <= 0) return srcDataSet;
if (srcDataSet == null || srcDataSet.Tables.Count <= 0) return srcDataSet;
DataSet ds = new DataSet();
DataTable srcTable = srcDataSet.Tables[0].Copy();
srcTable.TableName = "table1";
DataTable destTable = destDataSet.Tables[0].Copy();
destTable.TableName = "table2";
ds.Tables.Add(srcTable);
ds.Tables.Add(destTable);
try
{
string relationName = "MidRelation";
int iColumnLen = srcTable.Columns.Count;
DataColumn[] parentDataColumn = new DataColumn[iColumnLen];
srcTable.Columns.CopyTo(parentDataColumn, 0);
DataColumn[] childDataColumn = new DataColumn[iColumnLen];
destTable.Columns.CopyTo(childDataColumn, 0);
//通过所有字段建立表间关联
DataRelation dataRelation = new DataRelation(relationName,
parentDataColumn, childDataColumn, false);
ds.Relations.Add(dataRelation);
DataRow[] drChild;
foreach (DataRow drParent in srcTable.Rows)
{
drChild = drParent.GetChildRows(dataRelation);
//如果与中间表没有对应,则表示为新增或者修改的
if (drChild == null || drChild.Length == 0) continue;
drParent.Delete();
}
srcTable.AcceptChanges();
DataSet rtnDs = new DataSet();
rtnDs.Tables.Add(srcTable.Copy());
return rtnDs;
}
catch (Exception ex)
{
throw ex;
}
finally
{
ds.Dispose();
}
}