BQONE

深夜了,我还敲打着我的知已!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
/// <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();
            }
        }
posted on 2007-10-24 12:46  BQONE  阅读(957)  评论(0编辑  收藏  举报