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); }