먼저 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
병합 된 dataTable은 다음과 같습니다.
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
그러나 병합 된 출력 데이터 테이블은 다음과 같이 보일 것입니다 (추가 작업이 가능하도록).
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에 대해 3 개의 복제본이 존재할 수 있습니까? 2. 보존 할 중복 레코드와 삭제할 레코드를 어떻게 정의 할 수 있습니까? 예를 들어 레코드를 최소로 유지NRO
하고 다른 레코드를 삭제할 수 있습니다 .