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;
}