좋은 자료 감사합니다. 우선 퍼갑니다.
문제 발생시 연락주시면 삭제하겠습니다..
지금 해보고자 하는 것은 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); } Toss(ds); //DataSet을 XML 파일 만드는 함수로 넘기기 MessageBox.Show("XMl파일이 생성 되었습니다"); } |
그 다음은 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 방법이 많이 허접합니다. 다른 방법이 있다면 알려주세요!