Пример #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());
        }
Пример #2
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();
            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();
        }
Пример #3
0
 public string UPDATE(RowCompare compare)
 {
     return string.Format(updateCommandTemplate, compare.Set, compare.Where);
 }