DataTable 클래스와 XML을 이용한 도서 관리 프로그램 만들기
DataTable 클래스에서는 메모리 상의 테이블입니다. ADO.NET 에서는 논리적 DB를 XML 형태로 저장하고 로딩할 수 있게 기술을 지원하고 있습니다.
DataTable 클래스에도 WriteXml, WriteXmlSchema, LoadXml, LoadXmlSchema 메서드를 제공하여 메모리 상의 테이블 구조와 내용을 XML 형태로 저장하고 로딩할 수 있습니다.
public void WriteXml(Stream stream);
public void WriteXml(string filename);;
public void WriteXml(TextWriter writer);
public void WriteXml(XmlWriter writer);
public void WriteXml(Stream stream, bool hierarchy); //hierarchy: 테이블의 모든 하위 항목 내용 포함 여부
public void WriteXml(Stream stream, XmlWriteMode mode);
public void WriteXml(string filename, bool hierarchy);
public void WriteXml(string filename, XmlWirteMode mode);
public void WriteXml(TextWriter writer, bool hierarchy);
public void WriteXml(TextWriter writer, XmlWirteMode mode);
public void WriteXml(XmlWriter writer, bool hierarchy);
public void WriteXml(XmlWriter writer, XmlWirteMode mode);
public void WriteXml(Stream stream, XmlWriteMode mode, bool hierarchy);
public void WriteXml(string filename, XmlWriteMode mode, bool hierarchy);
public void WriteXml(TextWriter writer, XmlWriteMode mode, bool hierarchy);
public void WriteXml(XmlWriter writer, XmlWriteMode mode, bool hierarchy);
public void WriteXmlSchema(Stream stream);
public void WriteXmlSchema(String filename);
public void WriteXmlSchema(TextWriter writer);
public void WriteXmlSchema(XmlWriter writer);
public void WriteXmlSchema(Stream stream, bool hierarchy);
public void WriteXmlSchema(String filename, bool hierarchy);
public void WriteXmlSchema(TextWriter writer, bool hierarchy);
public void WriteXmlSchema(XmlWriter writer, bool hierarchy);
public XmlReadMode ReadXml(Stream stream);
public XmlReadMode ReadXml(string filename);
public XmlReadMode ReadXml(TextWriter writer);
public XmlReadMode ReadXml(XmlWriter writer);
public void ReadXmlShema(Stream stream);
public void ReadXmlShema(string filename);
public void ReadXmlShema(TextWriter writer);
public void ReadXmlShema(XmlWriter writer);
DataTable 개체의 구조를 파일에 저장할 때는 WriteXmlSchema 메서드를 사용합니다.
dt.WriteXmlSchema(schema_fname, true);
DataTable 개체에 보관한 데이터를 저장할 때는 WriteXml 메서드를 사용합니다.
dt.WriteXml(fname, true);
DataTable 개체의 구조를 파일에서 로딩할 때는 ReadXmlSchema 메서드를 사용합니다.
dt.ReadXmlSchema(schema_fname);
파일에 있는 데이터를 DataTable 개체로 로딩할 때 ReadXml 메서드를 사용합니다.
dt.ReadXml(fname);
using System; using System.Data; using System.IO;
namespace 도서_관리_프로그램 { class BookManager { DataTable dt = new DataTable("Books"); readonly string schema_fname = "books.xsd"; readonly string fname = "book.xml"; static BookManager bm = null;
internal static void Run() { bm = new BookManager(); bm.Start(); bm.Save(); }
private void Save() {
dt.WriteXml(fname, true); }
private void Start() { ConsoleKey key;
while ((key = SelectMenu()) != ConsoleKey.Escape) { switch (key) { case ConsoleKey.F1: AddBook(); break; case ConsoleKey.F2: RemoveBook(); break; case ConsoleKey.F3: FindBook(); break; case ConsoleKey.F4: ListBook(); break; default: Console.WriteLine("잘못 선택하였습니다."); break; }
Console.WriteLine("아무 키나 누르세요."); Console.ReadKey(); } }
private void ListBook() { int row_count = dt.Rows.Count; Console.WriteLine("보유 도서수:{0}", row_count);
foreach(DataRow dr in dt.Rows) { ViewBook(dr); } }
private void FindBook() { string isbn = string.Empty; Console.WriteLine("검색할 도서의 ISBN을 입력하세요."); isbn = Console.ReadLine(); DataRow dr = dt.Rows.Find(isbn); if (dr == null) { Console.WriteLine("존재하는 ISBN이 아닙니다."); return; } ViewBook(dr); }
private void ViewBook(DataRow dr) { foreach (DataColumn dc in dt.Columns) { Console.WriteLine("{0}:{1}", dc.ColumnName, dr[dc]); } Console.WriteLine("-------------------------------------"); }
private void RemoveBook() { string isbn = string.Empty; Console.WriteLine("삭제할 도서의 ISBN을 입력하세요."); isbn = Console.ReadLine(); DataRow dr = dt.Rows.Find(isbn); if (dr == null) { Console.WriteLine("존재하는 ISBN이 아닙니다."); return; } dt.Rows.Remove(dr); Console.WriteLine("삭제하였습니다."); } private void AddBook() { string isbn = string.Empty; string title = string.Empty; string author = string.Empty; int price = 0;
Console.WriteLine("추가할 도서의 ISBN을 입력하세요."); isbn = Console.ReadLine();
if (Exist(isbn)) { Console.WriteLine("이미 존재하는 ISBN입니다."); return; } Console.WriteLine("도서명을 입력하세요."); title = Console.ReadLine();
Console.WriteLine("저자명을 입력하세요."); author = Console.ReadLine();
Console.WriteLine("가격을 입력하세요."); if (int.TryParse(Console.ReadLine(), out price) == false) { Console.WriteLine("잘못 입력하였습니다."); return; }
AddBook(isbn, title, author, price); }
private void AddBook(string isbn, string title, string author, int price) { try { DataRow dr = dt.NewRow(); dr["ISBN"] = isbn; dr["Title"] = title; dr["Author"] = author; dr["Price"] = price; dt.Rows.Add(dr); Console.WriteLine("{0} 추가 성공", title); } catch (Exception e) { Console.WriteLine("{0} 추가 실패", title); Console.WriteLine("이유:{0}", e.Message); } }
private bool Exist(string isbn) { return dt.Rows.Find(isbn) != null;
}
private ConsoleKey SelectMenu() { Console.Clear(); Console.WriteLine("도서 관리 프로그램 [ESC]: 종료"); Console.WriteLine("F1:도서 추가 F2:도서 삭제 F3:도서 검색 F4:전체보기"); return Console.ReadKey().Key; } private BookManager() { if (File.Exists(schema_fname)) { dt.ReadXmlSchema(schema_fname);
if (File.Exists(fname)) { dt.ReadXml(fname); } } else { TableDesign(); dt.WriteXmlSchema(schema_fname, true); } } private void TableDesign() { DataColumn dc_title = new DataColumn(); dc_title.ColumnName = "Title"; dc_title.DataType = typeof(string); dc_title.AllowDBNull = false; dt.Columns.Add(dc_title);
DataColumn dc_isbn = new DataColumn("ISBN", typeof(string)); dc_isbn.Unique = true; dc_isbn.AllowDBNull = false; dt.Columns.Add(dc_isbn); DataColumn dc_author = new DataColumn(); dc_author.ColumnName = "Author"; dc_author.DataType = typeof(string); dc_author.AllowDBNull = false; dt.Columns.Add(dc_author);
DataColumn dc_price = new DataColumn(); dc_price.ColumnName = "Price"; dc_price.DataType = typeof(int); dc_price.AllowDBNull = false; dt.Columns.Add(dc_price); DataColumn[] pkeys = new DataColumn[1]; pkeys[0] = dc_isbn; dt.PrimaryKey = pkeys; } } class Program { static void Main(string[] args) { BookManager.Run(); } } } |
[소스] DataTable과 XML 파일을 이용한 도서 관리 응용 예제 코드
'프로그래밍 기술 > SQL과 ADO.NET' 카테고리의 다른 글
[ADO.NET] SqlDataAdapter (0) | 2016.04.22 |
---|---|
[ADO.NET] DataView 클래스를 사용 예 - 도서 관리 프로그램 (0) | 2016.04.22 |
[ADO.NET] DataView (0) | 2016.04.22 |
[ADO.NET] DataSet과 XML을 이용한 출판사 별 도서 관리 프로그램 만들기 (0) | 2016.04.22 |
[ADO.NET] DataTable 개체에 행 추가 (0) | 2016.04.22 |
[ADO.NET] DataTable 클래스 개체 생성과 테이블 구조 설계 (0) | 2016.04.22 |
[MSSQL] 저장 프로시저 만들기 실습 (0) | 2016.04.22 |
서버 탐색기를 이용하여 SQL 저장 프로시저 사용하기 (0) | 2016.04.22 |
[ADO.NET] SqlParameter 사용 예 - 저장 프로시저를 이용하여 도서 추가 (0) | 2016.04.22 |
[ADO.NET] SqlParameter 클래스 사용 예 - 도서 추가 (0) | 2016.04.22 |