ก่อนอื่นฉันต้องได้รับข้อมูลทั้งหมดจาก 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
อย่างไรก็ตามเอาท์พุทที่ผสานข้อมูล dataTable ควรมีลักษณะดังนี้
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
จากตารางที่ NRO1
2 ตารางที่ 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
และลบบันทึกอื่น ๆ