지금 해보고자 하는 것은 DataBase(앞으론 줄여서 DB)에 있는 테이블의 데이터를 XML 파일로 작성하고, 또한 XML 파일을 DB 테이블을 옮기는 것입니다.. 역시 알고나니....-_-;;; |
방식은 위의 도형과 같이 XML 과 DB 중간에 DataSet이란게 들어갑니다. (다른 방식이 있다면 알려주세요ㅠ)
- .NET에서의 핵심적인 기술 분야가 XML입니다. 데이터 셋은 내부적으로는 XML과 호환되는 형식을 취하고 있습니다. 관점에 따라서는 데이터 셋 자체를 하나의 완전한 XML문서로 볼 수 있습니다. 그리고 외부의 XML문서를 가져와서 데이터 셋으로 변경하여 활용할 수도 있습니다. 데이터와 스키마를 XML문서로 읽고 쓸 수 있습니다.
따라서 지금부터 DataSet과 XML을 가지고 놀아보겠습니다.
먼저 DB에 있는걸 XML 문서로 만드는 소스입니다.
밑에 있는 소스는 DB에 있는 테이블을 읽어와 DataSet에 넣는 작업입니다.
private void button1_Click(object sender, EventArgs e) //DB테이블 -> DataSet으로 { String cstr = "server = 504-88\\SQL2005;database=master;"; cstr += "uid=seol;password=1;"; SqlConnection scon = new SqlConnection(cstr); SqlCommand scom = new SqlCommand(); scom.Connection = scon; scom.CommandText = "select * from fruits"; scon.Open(); SqlDataReader sr; sr = scom.ExecuteReader(); DataSet ds = new DataSet(); DataTable dt = new DataTable("myTable"); DataColumn dc = new DataColumn("number", typeof(int)); dt.Columns.Add(dc); dc = new DataColumn("fname", typeof(string)); dt.Columns.Add(dc); ds.Tables.Add(dt); DataRow row; while (sr.Read()) { row = ds.Tables["myTable"].NewRow(); row[0] = sr.GetValue(0); row[1] = sr.GetValue(1); ds.Tables["myTable"].Rows.Add(row); }
} |
그 다음은 DataSet을 Toss 함수로 넘겨줘서 XML 파일로 작성하는 코드입니다. (Toss는 제가 임의로 만든 함수)
private void Toss(DataSet ds) //XML파일로 만들기 { //XML Schema와 자료를 FileStream을 이용해서 파일에 기록하기 SaveFileDialog save = new SaveFileDialog(); save.Filter = "xml file (*.*)|*.*"; //파일 필터링 save.ShowDialog(); //다이얼로그 박스 띄우기 //filestream 생성 System.IO.FileStream fsWriteXml = new System.IO.FileStream //파일에 기록하기 위한 XmlTextWriter 생성 System.Xml.XmlTextWriter xmlWriter = new System.Xml.XmlTextWriter (fsWriteXml, System.Text.Encoding.Unicode); //문서를 기록하기 위한 WriteXml 메서드 이용 ds.WriteXml(xmlWriter); //FileStream 닫기 fsWriteXml.Close(); //original DataSet 정리 ds.Dispose(); //새로운 DataSet 생성 DataSet newDataSet = new DataSet("New DataSet"); //Read the XML document back in //FileStream 생성 System.IO.FileStream fsReadXml = new System.IO.FileStream(save.FileName, System.IO.FileMode.Open); //파일을 읽기 위한 XmlTextRader 생성 System.Xml.XmlTextReader myXmlReader = new System.Xml.XmlTextReader(fsReadXml); //DataSet 안으로 XML 문서 읽기 newDataSet.ReadXml(myXmlReader); //XmlTextReader 닫기 myXmlReader.Close(); } |
여기까지가 DB -> XML 파일 만드는 코드입니다.
지금부터는 XML -> DB로 옮기는 코드입니다. 이 코드는 아는 동생과 함께 해봤습니다. 여러가지 방법이 있는 것 같아, 저는 Adapter를 이용해서 해보려고 했지만..실패했습니다 ㅠㅠ SqlParameter로 하니 금방 해결되더군요 -.-;;;
(다른 방법을 알고 계시면 꼭 댓글달아주시길 바래요!! 알고 싶습니다!!)
private void button2_Click(object sender, EventArgs e) //xml -> DB 테이블로 넣기!! { OpenFileDialog open = new OpenFileDialog(); open.Filter = "xml file (*.*)|*.*"; //파일 필터링 /* -----------------------------------------------------------------*/ String cstr = "server = 504-88\\SQL2005;database=master;"; cstr += "uid=seol;password=1;"; string quey = "insert fruits (number, fname) values (@number,@fname)"; SqlConnection scon = new SqlConnection(cstr); SqlCommand scom = new SqlCommand(); scom.Connection = scon; scom.CommandType = CommandType.Text; scom.CommandText = quey; SqlParameter sparam1 = new SqlParameter("@number", SqlDbType.TinyInt); SqlParameter sparam2 = new SqlParameter("@fname", SqlDbType.VarChar, 50); DataSet ds = new DataSet("myTable"); ds.ReadXml(open.FileName); //xml파일 가져오기.. scom.Parameters.Add(sparam1); scom.Parameters.Add(sparam2); scom.Connection.Open(); foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.Rows) { sparam1.Value = int.Parse(row["number"].ToString()); sparam2.Value = row["fname"].ToString(); scom.ExecuteNonQuery(); } } scon.Close(); } |
p.s 방법이 많이 허접합니다. 다른 방법이 있다면 알려주세요!
'programming > XML' 카테고리의 다른 글
XML DOM(문서 개체 모델) (0) | 2010.07.29 |
---|---|
XML <--> DB 연동!! 이번에는 IMAGE 주고받기. (0) | 2010.07.06 |
XMLWriter 클래스 (0) | 2010.06.22 |
XML Reader 클래스 (0) | 2010.06.21 |
네임스페이스와 Prefix (0) | 2010.06.21 |