DataTable : 데이터 테이블 객체DataTable 뒤에 테이블 명을 명시한다.[ 파일명 : MemoryDB.cs ]
public void MakeAccountTable()
{
DataTable accountTable = new DataTable("Account");
}
DataColumn : 칼럼 객체예시
public void MakeAccountTable()
{
DataColumn dc_id = new DataColumn("accId", typeof(int));
dc_id.AutoIncrement = true;
dc_id.AucoIncrementSeed = 1;
dc_id.AutoIncrementStep = 1;
accountTable.Columns.Add(dc_id);
}
accId는 생성할 칼럼의 이름이다. 뒤에 칼럼의 타입을 명시한다.
칼럼 객체를 만들어 dc_id 변수에 저장한다.
AutoIncrement
: 숫자 자동 증가를 설정한다.
AutoIncrementSeed
: 시작 숫자의 기본 값을 정한다. 위 코드에서는 1로 설정하였고, 따로 설정하지 않으면 0으로 기본값이 설정된다.
AutoIncrementStep
: 증감의 폭을 설정한다. 위 코드에서는 증감 폭을 1로 설정하였다.
accountTable.Columns.Add(dc_id)
: 앞에서 설계한 구조를 바탕으로 데이터 테이블을 생성한다.

위와 같은 방식으로 칼럼을 여러 개 지정할 수 있다.
accId : 아이디, 고유키, int타입
accNumber : 계좌번호, Unique 속성, int 타입
accName : 이름, string 타입
accBalance : 잔액, int 타입
accDate : 계좌 개설일, DateTime 타입
PrimaryKey 속성에 고유 키로 사용할 칼럼 배열을 설정한다.DataColumn [] PK = new DataColumn[1];
PK[0] = dc_id;
accountTable.PrimaryKey = PK;
new DataColumn[1]
: DataColumn 객체를 저장할 배열
기본 키가 하나의 열로 설정되므로 배열의 크기는 1이다.
고유키로 지정할 칼럼 dc_id를 배열의 첫 번째 요소에 할당한다.
데이터 테이블의 PrimaryKey 속성에 PK 배열을 할당하여, 지정한 열(dc_id)을 고유키로 설정한다.
DataRow 객체를 생성하여, 개체의 열마다 원하는 값을 넣는다.public bool AccountInsert(int number, string name, int balance, DateTime dt)
{
DataRow dr = accountTable.NewRow();
dr[1] = number;
dr[2] = name;
dr[3] = balance;
dr[4] = dt;
accountTable.Rows.Add(dr);
return true;
}
첫번째 요소인 dr[0]은 AutoIncrement이기 때문에 직접 열을 추가할 필요는 없다.
각 요소에 차례로 미리 지정한 칼럼에 해당하는 항목을 설정하면 된다.
Add 메서드를 통해 완성된 열을 생성한다.
[ 파일명 : Form1.cs ]
private MemoryDB _db = new MemoryDB();
private void AccountTableView()
{
DataTable dt = _db.AccountTable;
textBox1.AppendText(string.Format($"테이블명 : {dt.TableName}\r\n"));
textBox1.AppendText("---------------------------------------------\r\n");
textBox1.AppendText(string.Format($"PK : {dt.PrimaryKey[0].ColumnName}\r\n"));
textBox1.AppendText(string.Format($"칼럼 : {dt.Columns.Count}개\r\n"));
textBox1.AppendText(string.Format($"로우데이터 : {dt.Rows.Count}개\r\n"));
textBox1.AppendText("---------------------------------------------\r\n");
foreach(DataColumn col in dt.Columns)
{
string temp = string.Format($"{col.ColumnName}\t{col.DataType}\t{col.AllowDBNull}");
textBox1.AppendText(temp+"\r\n");
}
}
위에서 생성한 데이터 테이블의 정보를 출력하는 코드이다.
테이블명, 고유키, 칼럼 수, 로우데이터 수와 "칼럼 명 + 타입 + null 여부"를 출력한다.
PrimaryKey[0].ColumnName : 고유키Columns.Count : 칼럼 개수Rows.Count : 로우데이터 개수
데이터 테이블을 저장하고 불러올 때 WriteXml()과 ReadXml() 메서드를 활용할 수 있다.
WriteXml : 테이블의 로우데이터를 저장한다.
ReadXml : 테이블의 로우데이터를 가져온다.
[ 파일명 : MyXml.cs ]
//XML 저장
public static bool WriteAccount(DataTable dt)
{
dt.WriteXml(AccountXmlFileName);
return true;
}
//XML 불러오기
public static bool ReadAccount(DataTable dt)
{
if (File.Exists(AccountXmlFileName) == true)
{
dt.ReadXml(AccountXmlFileName);
}
return true;
}

스키마 정보를 저장하여 테이블의 구조를 출력할 수 있다.
WriteXmlSchema : 테이블의 구조를 저장한다.
ReadAccountSchema : 테이블의 구조를 가져온다.
//스키마 저장
public static bool WriteAccountSchema(DataTable dt)
{
dt.WriteXmlSchema(AccountSchemaXmlFileName);
return true;
}
//스키마 불러오기
public static bool ReadAccountSchema(DataTable dt)
{
if (File.Exists(AccountSchemaXmlFileName) == true)
dt.ReadXmlSchema(AccountSchemaXmlFileName);
return true;
}
