private string Compare(IPrimaryKeys pk, DataTable table1, DataTable table2) { this.PkColumns = pk; this.compareColumns = table1.Columns .OfType <DataColumn>() .Select(row => row.ColumnName) .Except(PkColumns.Keys) .Except(ExceptColumns) .ToArray(); StringBuilder builder = new StringBuilder(); TableDataClause script = new TableDataClause(schema2); List <DataRow> R2 = new List <DataRow>(); foreach (DataRow row1 in table1.Rows) { var row2 = table2.AsEnumerable().Where(row => RowCompare.Compare(PkColumns.Keys, row, row1)).FirstOrDefault(); if (row2 != null) { if (!RowCompare.Compare(compareColumns, row1, row2)) { var compare = new RowCompare(this, row1, row2); builder.AppendLine(compare.UPDATE(schema2.TableName)); } R2.Add(row2); } else { builder.Append(script.INSERT(new ColumnPairCollection(row1))); builder.AppendLine(); } } if (SideType != CompareSideType.copy) { foreach (DataRow row2 in table2.Rows) { if (R2.IndexOf(row2) < 0) { builder.AppendLine(script.DELETE(row2, pk)); } } } if (builder.ToString() != string.Empty && SideType == CompareSideType.compare) { builder.AppendLine(SqlScript.GO); } return(builder.ToString()); }
private string Compare(IPrimaryKeys pk, DataTable table1, DataTable table2) { this.PkColumns = pk; this.compareColumns = table1.Columns .OfType<DataColumn>() .Select(row => row.ColumnName) .Except(PkColumns.Keys) .Except(ExceptColumns) .ToArray(); StringBuilder builder = new StringBuilder(); TableClause script = new TableClause(schema1); List<DataRow> R2 = new List<DataRow>(); foreach (DataRow row1 in table1.Rows) { var row2 = table2.AsEnumerable().Where(row => RowCompare.Compare(PkColumns.Keys, row, row1)).FirstOrDefault(); if (row2 != null) { if (!RowCompare.Compare(compareColumns, row1, row2)) { var compare = new RowCompare(this, row1, row2); builder.AppendLine(script.UPDATE(compare)); } R2.Add(row2); } else { builder.Append(script.INSERT(row1)); builder.AppendLine(); } } if (SideType != CompareSideType.copy) { foreach (DataRow row2 in table2.Rows) { if (R2.IndexOf(row2) < 0) { builder.AppendLine(script.DELETE(row2, pk)); } } } if (builder.ToString() != string.Empty && SideType == CompareSideType.compare) builder.AppendLine(TableClause.GO); return builder.ToString(); }
public string UPDATE(RowCompare compare) { return string.Format(updateCommandTemplate, compare.Set, compare.Where); }