안녕하세요. 회원여러분.
오늘은 C# DataTable의 Merge에 대해 알아보도록 하겠습니다.
Merge : [동사] 합병[병합]하다, 합치다
위 뜻처럼 두개의 DataTable 중 하나의 DataTable 기준으로 두 DataTable를
합치는 함수입니다.
DataTable의 데이터를 가공 중 분산되어 DataTable을 하나의 DataTable로
합칠 때 사용할 수 있습니다.
※ DataTable의 Join함수는 DataTable간의 특정 칼럼값을 비교하여 데이터 행의 연결을 하는 함수며,
Merge함수는 DataTable간의 데이터를 하나의 DataTable로 합치는 것 입니다.
/// <summary>
/// 데이터테이블 합치는 함수.
/// </summary>
/// <param name="_mainDataTable">메인 데이터테이블. 이 테이블의 칼럼명을 기준으로 합쳐진다.</param>
/// <param name="_secondDataTable">합칠 데이터테이블. 메인 데이터테이블 칼럼명으로 합쳐진다.</param>
/// <returns></returns>
private DataTable SetDataTableMerge(DataTable _mainDataTable, DataTable _secondDataTable)
{
DataTable _newDataTable = new DataTable();
bool ColumnDataTypeError = false;
//칼럼수가 다르면
if (_mainDataTable.Columns.Count != _secondDataTable.Columns.Count)
{
_mainDataTable.Merge(_secondDataTable);
}
//칼럼수가 같다면.
else
{
//메인 데이터테이블의 칼럼명과 합칠 데이터테이블의 칼럼명을 같게 한다.
for (int i = 0; i < _mainDataTable.Columns.Count; i++)
{
_secondDataTable.Columns[i].ColumnName = _mainDataTable.Columns[i].ColumnName;
//만약 두 테이블 칼럼 데이터타입가 하나라도 다르면
if (_secondDataTable.Columns[i].DataType != _mainDataTable.Columns[i].DataType)
{
ColumnDataTypeError = true;
}
}
//칼럼의 데이터타입이 다르다면
if (ColumnDataTypeError)
{
for (int i = 0; i < _mainDataTable.Columns.Count; i++)
{
_newDataTable.Columns.Add(_mainDataTable.Columns[i].ColumnName, _mainDataTable.Columns[i].DataType);
}
for (int i = 0; i < _secondDataTable.Rows.Count; i++)
{
DataRow dr = _newDataTable.NewRow();
for (int j = 0; j < _secondDataTable.Columns.Count; j++)
{
dr[_newDataTable.Columns[j].ColumnName] = _secondDataTable.Rows[i][_newDataTable.Columns[j].ColumnName];
}
_newDataTable.Rows.Add(dr);
}
_mainDataTable.Merge(_newDataTable);
}
//칼럼의 데이터타입이 같다면
else
{
_mainDataTable.Merge(_secondDataTable);
}
}
return _mainDataTable;
}
Merge를 사용 시 주의해야 될 것은 DataTable간 구조(칼럼명, 칼럼 수, 데이터형식)가 같아야 합니다.
위 함수는 칼럼명, 칼럼 수, 데이터형식의 다름에 따른 오류를 줄이기 위해 조건문을 사용한 것 입니다.
위 함수를 사용한 샘플소스를 참고하시기 바랍니다.
이상 사이버지식정보장이었습니다.
'C#' 카테고리의 다른 글
[StringBuilder] C# StringBuilder 사용하기. (0) | 2021.07.27 |
---|---|
[ini] C# ini 파일 조회/저장/수정. (ini파일에 대하여) (0) | 2021.07.26 |
[C#] 프로그램 중복실행을 방지하자! (0) | 2021.07.14 |
[C#] 현재 PC에 설치되어 있는 글꼴 정보 가져오기. (0) | 2021.07.13 |
[C#] PC 정보를 알아보자. (0) | 2021.07.11 |