C#의 DataTable은 데이터베이스 테이블 형태의 테이블을 C#에서도 사용할 수 있도록 해놓은 것이다.
사용법은 데이터베이스와 똑같을테지만… 아쉽게도 아무 데이터베이스도 경험이 없는 나에게는 헷갈리는 것이 많아 이번에 정리를 해보고자 한다.
DataTable 생성
using System.Data;
DataTable Table = new DataTable();
컬럼 정의
Table.Columns.Add("Code", typeof(int));
Table.Columns.Add("Type", typeof(ItemType));
Table.Columns.Add("Name", typeof(string));
Table.Columns.Add("Grade", typeof(ItemGrade));
Table.Columns.Add("Stat", typeof(string));
Table.Columns.Add("Gold", typeof(int));
Table.Columns.Add("Description", typeof(string));
DataColumn[] key = new DataColumn[1];
key[0] = Table.Columns[0];
DataTable.Columns[index]
로 추가했던 Column에 접근이 가능하다.
인덱스는 0에서부터 시작해서 추가한 순서대로 Column이 들어간다.
로우 추가
Table.Rows.Add(new object[] { 0001, ItemType.ARMOR, "무쇠갑옷", ItemGrade.COMMON, 5, 300, "무쇠로 만들어져 튼튼한 갑옷입니다." });
Table.Rows.Add(new object[] { 0002, ItemType.WEAPON, "낡은 검", ItemGrade.COMMON, 2, 400, "쉽게 볼 수 있는 낡은 검입니다." });
컬럼을 추가했던 순서대로 속성을 배치한 object array를 생성해서
DataRow
를 만들 수 있다.
DataRow dataRow = Table.NewRow();
dataRow["Code"] = 0001;
dataRow["Type"] = ItemType.ARMOR;
dataRow["Name"] = "무쇠갑옷";
dataRow["Grade"] = ItemGrade.COMMON;
dataRow["Stat"] = 5;
dataRow["Gold"] = 300;
dataRow["Description"] = "무쇠로 만들어져 튼튼한 갑옷입니다.";
Table.Rows.Add(dataRow);
기본 키(Primary Key)
기본 키(Primary Key)는 해당 키를 이용하여 테이블의 모든 행을 검색할 수 있도록 하는 키이다.
고유(unique)한 단일 열이나 열의 조합으로 구성할 수 있다.
기본 키 설정
DataColumn[] key = new DataColumn[1];
key[0] = Table.Columns[0];
Table.PrimaryKey = key;
데이터 추출
기본 키를 이용한 접근
DataRow? dataRow = Table.Rows.Find(itemCode);
if (dataRow == null) throw new DataMisalignedException();
int basicStat = Convert.ToInt32(itemData["Stat"]);
기본 키를 설정했으면
DataTable.Rows.Find()
함수에 해당하는 값을 넣어주면
일치하는 기본 키를 가진 Row를 통채로 반환해준다.
이 때 각 데이터는 모두 object
형태로 반환되기 때문에
Convert
나 ToString()
을 이용해 캐스팅을 한 번 거쳐줘야 사용할 수 있다.
인덱스를 이용한 접근
for (int i = 0; i < Table.Rows.Count; i++)
{
ItemType itemType = (ItemType)Table.Rows[i]["Type"];
string name = Table.Rows[i]["Name"].ToString();
}
인덱스를 이용해서도 접근이 가능하다.
인덱스는 역시 추가한 순서대로.
foreach를 이용한 접근
foreach(DataRow dataRow in Table.Rows)
{
ItemType itemType = (ItemType)dataRow["Type"];
string name = dataRow["Name"].ToString();
}
Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
C# 값 vs 참조 형식 (Value vs Reference) (0) | 2023.08.24 |
---|---|
C# Sort() 메서드 다루기 (0) | 2023.08.23 |
C# 연산자 오버로딩과 인덱서(Indexer) (0) | 2023.08.21 |
코드 컨벤션 (0) | 2023.08.18 |
C# 생성자와 소멸자 그리고 가비지 컬렉터 (0) | 2023.08.17 |