|
DataSet class 함수 |
설 명 |
GetXml |
DataSet에 저장된 데이터를 XML 문서의 형태로 보여준다. |
GetXmlSchema |
XML 문서의 구조를 나타내는 스키마를 문서 형식으로 표현. 마찬가지로 WriteSchema를 사용할 때보다 오버헤드가 필요. |
WriteXml |
DataSet의 자료를 스키마와 XML로 저장 |
WriteXmlSchema |
DataSet의 스키마를 XML 스키마로 저장 |
System.Xml.dll 관련 class |
설 명 |
XmlTextWriter class |
XML 데이터를 포함하는 스트림이나 파일을 생성하는 빠르고, 캐시되지 않으며, 앞으로만 이동 가능한 방법을 제공 |
XmlReadMode class |
XML 데이터와 관계형 스키마를 DataSet으로 읽어오는 방법을 지정 |
응용 실습
서로 다른 DB에서 관리하는 Student Table과 Student2 Table이 있을 때, 이를 Xml이나 Schema로 표현 할 수 있고, Xml로 저장된 테이블 정보를 이용하여 하나의 Table로 통합이 가능하다
1.Stuendt Table과 Student2 Table
.
2. Student Table과 Student2 Table에 들어있는 정보
소스 설명
1. Student2 Table의 정보를 Xml, Xml-Schema 형태로 출력, 및 Xml파일로 변환
string xml_name = "test.xml"; string strConn = "Data Source=EHDRN-PC;Initial Catalog=testdb;User ID=jjh;Password=***********"; string strSql = "SELECT * FROM Student2"; SqlDataAdapter dataAdapter = new SqlDataAdapter(strSql, strConn);
DataSet ds = new DataSet(); dataAdapter.Fill(ds, "Student2"); |
SqlDataAdapter의 Fill을 사용하여 DataSet에 Student2 Table 정보를 채운다.
string strxml = ds.GetXml(); string strscm = ds.GetXmlSchema();
Console.WriteLine(" [DataSet -> XML 문서]"); Console.WriteLine("------------------------------------"); Console.WriteLine(strxml);
Console.WriteLine("\n [DataSet -> XmlSchema문서]"); Console.WriteLine("------------------------------------"); Console.WriteLine(strscm); |
DataSet의 GetXml, GetXmlSchema를 하용하여 Table의 정보를 Xml로 나타낼 수 있다.
FileStream fs = new FileStream(xml_name, FileMode.Create); XmlTextWriter xtw = new XmlTextWriter(fs, Encoding.Unicode);
ds.WriteXml(xtw); Console.WriteLine("XMl파일이 생성 되었습니다"); xtw.Close(); fs.Close(); ds.Dispose(); |
Student2 Table을 Xml파일로 생성한다.
|
실행 결과 Student2 Table의 정보가 Xml, Xml-Schema 형태로 표현되고, text.xml로 Xml파일이 생성되었다.
2. text.xml 파일을 읽어들여 Student Table과 통합.
string xml_name = "test.xml"; DataSet ds = new DataSet(); ds.ReadXml(xml_name, XmlReadMode.InferSchema);
string strxml = ds.GetXml(); Console.WriteLine(" [DataSet -> XML 문서]"); Console.WriteLine("------------------------------------"); Console.WriteLine(strxml); |
test.xml 파일을 ReadXml로 불러와 GetXml을 사용하여 성공적으로 읽어 들였는지 출력
SqlConnection scon = new SqlConnection(@"Data Source=EHDRN-PC;Initial Catalog=testdb;User ID=jjh;Password=1");
SqlParameter sparam1 = new SqlParameter("@s_id", SqlDbType.VarChar, 50); SqlParameter sparam2 = new SqlParameter("@s_name", SqlDbType.VarChar, 50); SqlParameter sparam3 = new SqlParameter("@s_tel", SqlDbType.VarChar, 50); |
SqlParameter를 생성하여 읽어온 test.xml의 정보를 Student Table에 들어갈 타입에 맞게 설정
tuderameteremachema
string quey = "insert Student (s_id, s_name, s_tel) values (@s_id, @s_name, @s_tel)";
SqlCommand scom = new SqlCommand();
scom.Connection = scon; scom.CommandType = CommandType.Text; scom.CommandText = quey;
scom.Parameters.Add(sparam1); scom.Parameters.Add(sparam2); scom.Parameters.Add(sparam3); scom.Connection.Open(); |
SqlCommand를 생성하여 생성한 parameter를 Add해 준 후 DB에 연결하여 Open해 준다.
foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.Rows) { sparam1.Value = row["s_id"].ToString(); sparam2.Value = row["s_name"].ToString(); sparam3.Value = row["s_tel"].ToString(); scom.ExecuteNonQuery(); } }
scon.Close(); ds.Dispose(); |
foreach를 사용하여 Student Table에 읽어온 Xml정보를 삽입해 준후 연결을 해제.
|
읽어온 test.xml 파일이 Student2 Table의 정보임을 알 수 있다.
통합된 Table 정보
test.xml의 정보(Stduent2 Table)를 읽어들여 기존의 Student Table과 통합이 완료되었다.
|