< 성진수의 C# 활용 2> 이문서의저작권은저에게있슴당..^^ ** MS SQL to XML ** 이번에는 MS_SQL 2000 과 XML과의관계를좀알아보겠습니다. 우선요즘 DBMS들이 XML과의호환성을놓이는데주력을하고있습니다. 그이유는 XML이이제는자료공유의표준화되었기때문입니다. 웹에서도그렇고모든자료를 XML형식으로주고받는추세이다보니 DBMS 또한 XML을지원해야겠지요.. 그래서이번엔 MS_SQL 2000과 XML과의관계를좀알아볼려고합니다. 저의허접한두번재활용팁이시작하겠습니다. ^^ 우선여러분의컴퓨터에는 VS.NET과 MS_SQL 2000이깔려있어야겠지요.. 깔려있나요? VS.NET은정식판을기준으로작성되었습니다. 이점을유의하시기를.. MS_SQL 2000 에서 XML로데이터가져오기자, MS_SQL 2000에서어떻게 XML을지원하는지부터실습으로함알아보겠습니다. 우선 MS_SQL 2000을설치하시면 [ 쿼리분석기 ] 라는것이생깁니다. 찾으셨나요? 그럼실행시켜보세요..
[ 그림 ] 쿼리분석기 그리고위그림처럼빨간사각형이칠해진곳에서 Northwind 를선택하세요. 이놈을 가지고우리가연습을할것입니다. 자, 다음과같이입력을하고실행을시켜보시면결과값이 XML 형식으로반환되는것을알수 있습니다. select * from customers for xml auto,elements;
[ 그림 XML 로반환된결과화면 ] 아 ~ 그렇습니다. 보통데이터베이스프로그램에서질의를수행시킬때 select * from customers; 라고써서사용했었는데.. 뒤에 for xml auto,elements 라는것을붙이니반환되는값이 XML이구나 ~ 감이오십니까? 닷넷에서는 ADO.NET을이용해데이터베이스응용프로그램을개발합니다. 자바에는 JDBC가있듯이.. ADO.NET에서는기본적으로비연결형의 XML데이터를사용합니다. 바로 DataSet라는놈을이용해서말입니다.. 여기서 ADO.NET에대해서다설명할수는없지만.. 말이나왔으니아주간단하게만소개하겠습니다. 우선 ADO.NET에는 OLEDB제공자와 SQLSERVER제공자 ODBC.NET제공자이렇게 3개의닷넷데이터제공자가있습니다. ODBC.NET은나중에따로추가가된놈이죠. 이제공자에따라프로그램이많이다른가? 전혀다르지않습니다. 똑같습니다. 단지해당제공자의앞글자만바꾸어주면됩니다. 예를들어 OledbConnection 과 SqlConnection 처럼말입니다. ODBC의경우에도마찬가지입니다. 앞강의에서다루어봤으니아시죠? 그럼이제공자는머때문에 3개로나누어져제공되는가? 그것은사용하는 DBMS가무엇이냐에따라구분이되는것입니다. SQLSERVER 제공자는 MS_SQL 7.0 버전이상에서만사용하는 MS_SQL 전용제공자입니다. 말에서도알수있듯이전용입니다. 즉, MS_SQL을사용할때 SQLSERVER제공자를사용하면성능의향상을볼수있다는뜻입니다. 실제로 MS_SQL을사용
하면다이렉트로.. 쫙 ~ 쫙 ~ 연결되값을가져옵니다.. 빠르죠.. 그리고이 MS_SQL 7.0 이상버전을제외한모든것으다.OLEDB나 ODBC를사용합니다. 어 ~ 말이생각보다길어지는군요.. 보다자세한것은다음에하도록하고우선제가여기서이야기하려고하는것은이런제공자를이용해서실제로 DB와연동을이루어데이터값을가지고올때입니다. ADO.NET 이전에는 DB와계속연결을유지하는연결지향형이였습니다. 그러나 ADO.NET에와서는 DataSet이라는놈을이용해서 DB의모든내용을 XML형식으로받아오고연결을끊어버립니다. 그리고가져온 XML데이터는하드디스크처럼물리적인저장공간에저장하는것이아니라.. 메모리에저장하게됩니다. 메모리가하드보다빠르다는것은다아시죠? 그럼메모리에저장을하면좋은점은속도가빠르다는것입니다.. 속도가^^ ASP.NET 도 JSP,PHP 보다엄첨빠른이유는케쉬를이용하기때문이죠.. 말이자꾸길어진다..^^ 하여간이 DatsSet을이용하면내가 XML이다안해도자동으로 XML 형식으로가져옵니다. 하지만이 DataSet이항상좋은것은아닙니다. 서버의메모리를많이사용하기때문에무리를주기때문이죠.. 적절하게상황에맞게사용해야합니다.. 보자자세하게알고싶으시다면.. 제가쓴책을참고하세요..^^ 한빛미디어 IT백두대간닷넷프로그램입니다..( 아 ~ 쑥쓰럽다.. ** ^^ **) 그래서여기서는 DataSet을이용하지않고직접 XML형식으로값을받아오는방법을알아보겠습니다. 폼디자인
[ 그림폼디자인 ] 그림과같이폼을만드세요.. 여기서보기형식이라는것이있는데.. 이보기형식이하는역할을 DB 에서가져온값을 XML 태그를포함해서보여줄것인지, 아니면값만보여줄것인지를선택하는역할을합니다. XML 네임스페이스추가하기 using System.Xml; //XML에관한기능을사용하기위해 XML 네임스페이스추가 using System.Data.SqlClient; //MS SQL 7.0이상버젼에사용되는 MS SQL전용제공자. using System.IO; 다음과같이추가하세요.. 닷넷에서는 XML을다루기위한네임스페이스가따로제공됩니다.
아주유용한놈이죠.. ㅋㅋ 보기형식을저장해둘변수선언 namespace MSSQL_XML public class Form1 : System.Windows.Forms.Form private string select_view = "ReadString()";// 변수추가 ( 이하생략.. 그냥두세요^^) [SQL -> XML 로 ] 버튼기능구현. 버튼을더블클릭하면클릭이벤트가자동으로만들어집니다. 그리고이코드를삽입! private void button1_click(object sender, System.EventArgs e) listbox1.items.clear(); try //SQL 서버와연결하기위한연결객체생성.. MS SQL에기본적으로있는 //northwind 를사용합니다. string source = @"Server=JINS1024;uid=sa;pwd=;database=Northwind"; SqlConnection sqlconn = new SqlConnection(source); sqlconn.open(); //SQL에서수행할질의를생성이때 select * from Customers FOR XML //AUTO,ELEMENTS 것은결과를 XML형식으로하겠다는것임. // 쿼리분석기에서이렇게명령을주면 XML형식으로결과를반환해줌. SqlCommand sqlcmd = new SqlCommand("select * from Customers for xml auto,elements;",sqlconn); // 위에서만든질의를수행시키고반환되는 XML값을 XMLREADER 객체로받음. System.Xml.XmlReader it_xml = sqlcmd.executexmlreader(); // 보기형식에서어떤형태를선택했는가에따른기능구현.. if(select_view == "ReadString()") while(it_xml.read())
listbox1.items.add(it_xml.readstring()); else while(it_xml.read()) listbox1.items.add(it_xml.readouterxml()); sqlconn.close(); catch MessageBox.Show(" 에러발생 "); 움 ~ 길다 ~.. ^^ 길다고생각하지마세요.. 길어보이는것뿐이지.. 별거없습니당.. 라디오버튼구현라디오버튼을더블클릭해서다음의코드를삽입! private void radiobutton2_checkedchanged(object sender, System.EventArgs e) select_view = "ReadString()"; private void radiobutton1_checkedchanged(object sender, System.EventArgs e) select_view = "ReadOuterXml()"; 다하셨나요? 구현끝 ~ 간단하죠? 한번테스트해보세요.. 진짜 XML형식으로반환이되는가.. 위소스에서빨간부분이키포인트입니다.. 유의해서보세요. 아.. 이소스에대해서보다자세하게알고싶다.. 그러면.. 조금만기다리세요
제두번째책에서 ^^ 혹시에러가발생한다면 MS_SQL 연결을위한 ID 와 PWD 를확인해보세요 ^^ 그럼.. 도움이되셨나요??? 그럼다음에.. 보다유익한팁과정보로 my home : http://www.cdama.com.ne.kr my book : http://www.cdama.com.ne.kr/my_book.htm -- 배재대학교컴퓨터공학과 96 학번 --