По-перше, мені потрібно отримати всі дані від ODBC (це вже працює).
Потім йде найскладніша частина, в якій я ще не впевнений, як це можна зробити. У ODBC є дві таблиці даних. Я зливаю їх зі своїм поточним кодом і фільтрую їх за певними параметрами.
Таблиця 1 в базі даних:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Таблиця 2 в базі даних:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
Об'єднана таблиця даних виглядає так:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Однак об'єднані вихідні даніTable повинні виглядати так (щоб мати можливість працювати з ним далі):
NRO NRO1 NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 463 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Знайти дублікати в NAME
. Залиште лише одну з них, призначте число від таблиці 1 до NRO
від таблиці 2 до NRO1
. Цифри таблиці 1 повинні бути у NRO
, цифри таблиці 2 - у NRO1
.
Після підключення до ODBC я заповнюю одну таблицю даними з таблиці 1
DataTable dataTable = new DataTable("COMPANY");
using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
{
dbConnectionSE.Open();
OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);
dadapterSE.Fill(dataTable);
}
то я отримую дані з іншої таблиці 2 і об'єдную їх:
using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
{
dbConnectionFI.Open();
OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);
var newTable = new DataTable("COMPANY");
dadapterFI.Fill(newTable);
dataTable.Merge(newTable);
}
Після цього я виконую фільтрацію (мені потрібно мати рядки, починаючи лише з 4 та 1 дюйма NRO
, також є рядки з іншим початковим номером):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Потім я додаю ще один стовпець для NRO1
(це також додавання нулів (0) мені не потрібні в стовпці NRO1
):
results.Columns.Add("NRO1", typeof(int)).SetOrdinal(1);
foreach (DataRow row in results.Rows)
{
//need to set value to NewColumn column
row["NRO1"] = 0; // or set it to some other value
}
Я можу спіймати дублікати з цим кодом
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
але як виконати решту? Це повинен виконувати цикл зі створенням нової таблиці? Як я можу виконати приєднання та видалення дублікатів до dataTable
?
NAME
. Якщо більше двох - помилка (обробник помилок). 2. У моєму прикладі сталася помилка, я її тепер виправив. Дякую, що згадуєте про це, важливо.
dataTable
містити більше двох дублів для якогось імені? Наприклад, чи можна існувати три дублікати для BMW? 2. Як можна визначити, який із записів дублікатів зберігати, а який видалити? Наприклад, ми можемо зберігати запис з мінімальнимNRO
та видаляти інший запис.