C#

[C#]DataTable 복사(Copy)와 복제(Clone) 방법

DevStory 2021. 7. 27.

DataTable을 복사하는 DataTable.Copy() 메소드와 DataTable을 복제하는 DataTable.Clone() 메소드를 정리합니다.


Copy()

DataTable컬럼(Column), 행(Row), 행의 상태(RowState)를 복사합니다.

DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));

DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);

DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);

위 코드를 실행한 dt의 구조입니다.

Copy() 메소드를 사용하여 dt를 dtCopy에 복사합니다.

DataTable dtCopy = dt.Copy();

컬럼과 행이 복사되었습니다.

 

행의 상태(RowState)도 복사되는가?

행의 상태가 복사되는지 확인하기 위한 전체 코드입니다.

// 1. DataTable dt에 컬럼 생성 및 행 추가
DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));

DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);

DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);

// 2. Console에 dt의 Row 상태 확인
Console.WriteLine("*****dt의 RowState*****");
foreach (DataRow row in dt.Rows)
{
  Console.WriteLine(row.RowState.ToString());
}

// 3. dt를 dtCopy에 복사
DataTable dtCopy = dt.Copy();

// 4. 상태도 복사되었는지 확인
Console.WriteLine("\n*****dtCopy의 RowState*****");
foreach (DataRow row in dtCopy.Rows)
{
  Console.WriteLine(row.RowState.ToString());
}

dt의 행(row)의 수만큼 forEach문을 실행합니다.

각 행의 상태를 콘솔에 출력합니다.

// 2. Console에 dt의 Row 상태 확인
Console.WriteLine("*****dt의 RowState*****");
foreach (DataRow row in dt.Rows)
{
  Console.WriteLine(row.RowState.ToString());
}

dt에는 2개의 행이 존재하며, 2개의 행은 Added 상태입니다.

dt를 dtCopy에 복사하고 dtCopy의 각 행의 상태를 콘솔에 출력합니다.

// 3. dt를 dtCopy에 복사
DataTable dtCopy = dt.Copy();

// 4. 상태도 복사되었는지 확인
Console.WriteLine("\n*****dtCopy의 RowState*****");
foreach (DataRow row in dtCopy.Rows)
{
  Console.WriteLine(row.RowState.ToString());
}

행의 상태도 복사가 됩니다.


Clone()

DataTable의 컬럼(Column)을 복사합니다.

DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Subject", typeof(string));
dt.Columns.Add("Score", typeof(int));

DataRow rowEx1 = dt.NewRow();
rowEx1["ID"] = "A";
rowEx1["Subject"] = "Java Programming";
rowEx1["Score"] = 100;
dt.Rows.Add(rowEx1);

DataRow rowEx2 = dt.NewRow();
rowEx2["ID"] = "B";
rowEx2["Subject"] = "C Programming";
rowEx2["Score"] = 80;
dt.Rows.Add(rowEx2);

위 코드를 실행한 dt의 구조입니다.

Clone() 메소드를 사용하여 dt를 dtCopy에 복제합니다.

DataTable dtCopy = dt.Clone();

컬럼만 복사되었으며, 행은 복사되지 않았습니다.


요약

Copy() 메소드

DataTable의 컬럼, 행, 행의 상태를 복사합니다.

 

Clone() 메소드

DataTable의 컬럼만 복사합니다.

즉, DataTable의 구조를 복사 합니다.

반응형

댓글