示例#1
0
        public DatabaseFile GetDifferences(DatabaseFile compare)
        {
            List <string> list = new List <string>();
            DatabaseFile  file = new DatabaseFile
            {
                DataSetName = base.DataSetName,
                Namespace   = base.Namespace
            };

            foreach (DataTable table in base.Tables)
            {
                file.Tables.Add(table.Clone());
            }
            file.EnforceConstraints = false;
            file.Relations.Clear();
            foreach (DataTable table2 in compare.Tables)
            {
                int ordinal;
                int num2;
                if (!base.Tables.Contains(table2.TableName))
                {
                    throw new ArgumentException("The files contain a different amount of tables!");
                }
                DataTable table3 = table2.Copy();
                DataTable table4 = this.Table(table3.TableName).Copy();
                if (this.Table(table4.TableName).PrimaryKey.Length == 0)
                {
                    if (this.Table(table4.TableName).Columns.Contains("ID"))
                    {
                        ordinal = this.Table(table4.TableName).Column("ID").Ordinal;
                        goto Label_01B2;
                    }
                    list.Add(table4.TableName);
                    continue;
                }
                ordinal = this.Table(table4.TableName).PrimaryKey[0].Ordinal;
Label_01B2:
                num2 = 0;
                while (num2 < table4.Rows.Count)
                {
                    for (int j = 0; j < table3.Rows.Count; j++)
                    {
                        if (!((table3.Rows[j].RowState != DataRowState.Deleted) && table4.Row(num2).ItemArray[ordinal] == table3.Rows[j].ItemArray[ordinal]))
                        {
                            continue;
                        }
                        for (int k = 0; k < table3.Rows[j].ItemArray.Length; k++)
                        {
                            if (table4.Row(num2).ItemArray[k] != table3.Rows[j].ItemArray[k])
                            {
                                file.Table(table3.TableName).ImportRow(table3.Rows[j]);
                                break;
                            }
                        }
                        table3.Rows.RemoveAt(j);
                        break;
                    }
                    num2++;
                }
                foreach (DataRow row in table3.Rows)
                {
                    file.Table(table3.TableName).ImportRow(row);
                }
            }
            string str = Environment.NewLine + Environment.NewLine;

            for (int i = 0; i < list.Count; i++)
            {
                str = str + list[i] + ", ";
            }
            str.Remove(str.Length - 2);
            //MessageBox.Show("NOTE: Deleted Rows and any rows from the following tables were not tested for:" + str, "Ryder Database Editor - Compare", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            file.AcceptChanges();
            return(file);
        }