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 static string GenerateRows(ITableSchema schema, TableReader reader) { var table = reader.Table; TableDataClause script = new TableDataClause(schema); StringBuilder builder = new StringBuilder(); foreach (DataRow row in table.Rows) { var pair = new ColumnPairCollection(row); builder.Append(script.INSERT(pair)).AppendLine(); } if (table.Rows.Count > 0) { builder.AppendLine(SqlScript.GO); } return(builder.ToString()); }