public void CompMst(DataTable pfrom, DataTable pto, List RelationCols, List NonCmopCols) { try { putLog(MethodBase.GetCurrentMethod(),"From=" + pfrom.TableName + " To=" + pto.TableName); for (int i = 0; i < NonCmopCols.Count; i++) { NonCmopCols[i] = NonCmopCols[i].ToUpper(); } if (pfrom.GetType().Equals(pto.GetType()) == false) { putLog("型が不一致 From=" + pfrom.GetType().ToString() + " To=" + pto.GetType().ToString(), logType.Warn); return; } if (pfrom.Columns.Count != pto.Columns.Count) { putLog("列数が不一致 From=" + pfrom.Columns.Count.ToString() + " To=" + pto.Columns.Count.ToString(), logType.Warn); return; } DataSet ds = new DataSet(); //from join to DataTable _from = pfrom.Copy(); _from.TableName = "from"; ds.Tables.Add(_from); DataTable _to = pto.Copy(); _to.TableName = "to"; ds.Tables.Add(_to); DataSet ds1 = new DataSet(); // to join from ds1.Tables.Add(_to.Copy()); ds1.Tables.Add(_from.Copy()); DataColumn[] colDs_0 = new DataColumn[RelationCols.Count]; DataColumn[] colDs_1 = new DataColumn[RelationCols.Count]; DataColumn[] colDs1_0 = new DataColumn[RelationCols.Count]; DataColumn[] colDs1_1 = new DataColumn[RelationCols.Count]; for (int i = 0; i 0) //fromとtoの共通の行 { foreach (DataRow r1 in rows) { // 項目の値を比較 string str = string.Empty; bool mod = utility.Comp(r1, ref str, r0, NonCmopCols); if (mod == true) { putLog("変更行 " + str); } } } else //fromにあってtoに無い。削除行 { string str = string.Empty; bool mod = utility.Comp(r0, ref str); putLog("削除行 " + str); } } foreach (DataRow r0 in ds1.Tables[0].Rows) { if (r0.GetChildRows(ds1.Relations[0]).Length == 0) //toにあってfromに無い。追加行 { string str = string.Empty; bool mod = utility.Comp(r0, ref str); putLog("追加行 " + str); } } } catch (Exception ex) { _putLog(ex); } } public static bool Comp(DataRow r, ref string str, DataRow r1 = null, List NonCmopCols = null) { StringBuilder sb = new StringBuilder(); bool mod = false; for (int c = 0; c < r.Table.Columns.Count; c++) { sb.Append(r.Table.Columns[c].ColumnName + "=" + r[c].ToString()); if (r1 != null) { if (NonCmopCols != null && NonCmopCols.IndexOf(r.Table.Columns[c].ColumnName.ToUpper()) < 0) { if (r[c].Equals(r1[c]) == false) { mod = true; sb.Append("<<" + r1[c].ToString() + ">>"); } } } sb.Append("__ "); } str = sb.ToString(); return mod; }