Example #1
0
        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());
        }
Example #2
0
        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());
        }