private int LoadList(DataTable fstTable, DataTable sndTable, int NamePole, ListView lv,string group, compFunc del,modFunc mod) { int counter = 0; List<int> nAdded = new List<int> { }; List<object[]> list = new List<object[]> { }; for (int j = 0; j < sndTable.Rows.Count; j++) list.Add(sndTable.Rows[j].ItemArray); for (int i = 0; i < fstTable.Rows.Count && i < sndTable.Rows.Count; i++) { int tmp = findRowInList(fstTable.Rows[i].ItemArray, list, new List<int> { 4, 5 }); if (tmp >= 0) { ListViewItem lvi = new ListViewItem(fstTable.Rows[i].ItemArray[NamePole].ToString(), lv.Groups[group]); lvi.SubItems.Add(sndTable.Rows[tmp].ItemArray[NamePole].ToString()); mod(lvi, true); lv.Items.Add(lvi); try { del(fstTable.Rows[i].ItemArray[NamePole].ToString()); } catch { } int c = fillCollumn(new ListView.ListViewItemCollection(listView2), fstTable.Rows[i].ItemArray[NamePole].ToString(), false); if (c > 0) { AllResultsout.Text += "В таблице " + fstTable.Rows[i].ItemArray[NamePole].ToString() + " обнаруженно " + c.ToString() + " ошибок!" + Environment.NewLine; lvi.BackColor = Color.Yellow; } counter++; } else { nAdded.Add(i); counter++; } } lv.Groups[group].Header = " Ошибок:" + counter.ToString(); autoSizeColumns(lv.Columns); return counter; }
//================================================================================================================================================================ private void compareTables() { listView1.Clear(); listView1.Columns.Add("Первая БД", listView1.Width / 2, HorizontalAlignment.Left); listView1.Columns.Add("Вторая БД", listView1.Width / 2, HorizontalAlignment.Left); listView1.Groups.Add("main", "Таблицы БДых"); modFunc modF = new modFunc(itemModyfaer); compFunc CollumnFunc = new compFunc(addTable2List); if (!MainDB.Tables.Contains("fstDBTablesSchema")) { MainDB.Tables.Add(loadTableSchema("Data Source=" + fstFilePath.Text + ";" + "FailIfMissing=True;Read Only=True;", null, "Tables", "fstDBTablesSchema")); MainDB.Tables.Add(loadTableSchema("Data Source=" + sndFilePath.Text + ";" + "FailIfMissing=True;Read Only=True;", null, "Tables", "sndDBTablesSchema")); } int counter = LoadList(MainDB.Tables["fstDBTablesSchema"], MainDB.Tables["sndDBTablesSchema"], 2, listView1, "main", CollumnFunc, modF); AllResultsout.Text = "Сравнение баз: " + Environment.NewLine + fstFilePath.Text.Substring(fstFilePath.Text.LastIndexOf("\\") + 1) + Environment.NewLine + sndFilePath.Text.Substring(sndFilePath.Text.LastIndexOf("\\") + 1) + Environment.NewLine + AllResultsout.Text; if(counter==0) AllResultsout.Text = "Все таблицы в базах данных одинаковы." + Environment.NewLine + AllResultsout.Text; else AllResultsout.Text = counter.ToString() + " таблиц в базе данных не совпадают." + Environment.NewLine + AllResultsout.Text; }