태그명으로 찾기

GetElementsByTagName("찾을태그네임")

XmlDocument(루트노드(문서자체))객체에서도 되고 XmlElement객체에서도 가능한 함수이며,

현제위치에서 '찾을태그네임'과 일치 하는 모든 하위 노드를 가져와 XmlNodeList를 반환 한다.

이거 javascript에서 썼던 함수와 이름과 인자가 완전히 일치하는것을 느꼈는가?

잘 모르겠다면 javascript편을 하나하나 훝어 보시길...

 

그런데 이함수의 용법을 보려고 MSDN에 갔더니 아래처럼 말한다.-_-;;;

참고에 나오는 방법은 다음 정리중에서 할것이니 일단은 GetElementsByTagName()를 사용해보겠다.

예제에서 가져온 하위 노드들을 가지고 같은 출력 다른 코딩을 해봤다.

예제는 booklist.xml에서 book의 모든 자식 title태그의 값 즉 모든 책제목을 출력하는 것이다.

(코딩은 간결하게 하기 귀찮아 붙여넣기 반복했다. 가독성은 좋다..... -_-;;)

 

예제에 쓰일 boolist.xml문서

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

 

public string pathURI=@"..\..\files\booklist.xml";

XmlDocument doc = new XmlDocument();
doc.Load(pathURI);

XmlNodeList titles= doc.GetElementsByTagName("title");

for (int i = 0; i < titles.Count; i++)
{
string disp= string.Format("titles[{0}].ChildNodes[0].value=

{1,-20}",i,titles[i].ChildNodes[0].Value);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
string disp = string.Format("titles[{0}].ChildNodes[0].InnerText={1,-20}", i, titles[i].ChildNodes[0].InnerText);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
XmlNode titleText = titles[i].ChildNodes[0];
string disp = string.Format("titleText.Value={0,-20}",titleText.Value);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
XmlNode titleText = titles[i].ChildNodes[0];
string disp = string.Format("titleText.InnerText={0,-20}", titleText.InnerText);
Console.WriteLine(disp);
}

 

 

 

 

 

출력결과

이것 외에도 똑같은 값을 다르게 출력할 수 있는 방법이 있으나 이정도면 자주쓰는 것이므로 여기서 정리하겠다.

 

 

ID로 해당 엘리먼트 가져오기

GetElementById("찾을ID")

'찾을ID'에 해당하는 XmlElement 객체를 반환한다.반환형은 XmlElement이다.

위의 함수와 비슷한 용법처럼 보이나 이 함수는 XmlDocumnet(루트노드(문서자체))에서만 가능하다. 그리고 위 함수 처럼

리스트를 가져오는 것이 아니라 XmlElement객체 하나만을 가져온다.(당연히 ID값은 유일하니까...)

 

 

예제) ID값이 b002인 책이름 가져오기

public string pathURI=@"..\..\files\booklist.xml";

XmlDocument doc = new XmlDocument();
doc.Load(pathURI);

XmlElement rootElet = doc.DocumentElement;
XmlNodeList childs = rootElet.ChildNodes;
XmlElement book = doc.GetElementById("b002");
Console.WriteLine(book.ChildNodes[0].InnerText);

b002인 ID를 갖는 엘리먼트를 book에 담고 그 book의

자식노드집합중에 첫번 째 노드 즉 Text엘리먼트의 InnerText를 출력한다. 값을 출력하는 방법은 여러가지가 있다는 것은 위에서 언급했으니 왜 이걸했냐고 묻지 말것~...

출력결과)

DOM

전체 xml 문서가 메모리 캐시 된것(Document Object Model)이라 하고 DOM을
사용해서 편집과 검색 XML문서 작성 등을 가능하게 한다.
.NET Framework에서 XmlDocument 클래스 제공.

 

 

예제용 XML문서

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

 

기본적인 DOM객체 생성 및 루트 엘리먼트와 루트엘리먼트의 속성값들

public string pathURI=@"..\..\files\booklist.xml";

private void btnDomEx01_Click(object sender, EventArgs e)
{

XmlDocument xmldoc = new XmlDocument();

xmldoc.Load(pathURI);

//xmldoc.LoadXml();

// 루트엘리먼트 : booklist 얻어오기
XmlElement rootElement = xmldoc.DocumentElement;

Console.WriteLine(rootElement.Name);
Console.WriteLine(rootElement.LocalName);
Console.WriteLine(rootElement.NamespaceURI);

}

XmlDocument() 생성자로 루트노드 즉 문서 자체를 가르키는 루트노드를 뜻한다.

 

Load(URL) 지정된 URL에서 XML 문서를 로드해 노드들을 만든다.

DocumentElement 루트 엘리먼트를 의미하며 여기서는 booklist가 된다.

Name속성은 현재 엘리먼트의 이름값을 갖는 속성이다

LocalName접두사를 제거한 현재 노드의 이름이다.예를 들어, <bk:book> 요소에서 LocalName은 book이다.

NamespaceURI는 엘리먼트에 네임스페이스 참조가 있을 경우에 그 네임스페이스를 값을 가지는 속성이다.

 

마지막 자식 찾기(자식이름출력)

XmlElement firstBook= rootElement.FirstChild as XmlElement Console.WriteLine(firstBook.Name);

형반환을 굳이 안해주고

rootElement.FirstChild.Name을 해줘도

같은결과가 나온다.

굳이 해준 이유는 XmlNode가 XmlElement의 부모클래스 이기 때문에 이런식으로 다운 캐스팅이 가능하다는 것을 보여주기 위해서이다.

아래에 클래스 계층구조가 있으니 참고하시길~

 

자식노드를 가져올 수 있는 속성들

현제엘리먼트.FirstChild

첫 번째 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트 1을 가지고 있음

현제엘리먼트.LastChild

마지막 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트 5를 가지고 있음

현제엘리먼트.FirstChild.NextSibling

첫 번째 자식의 형제노드를 가르킨다(속성자료형 XmlNode)

자식엘리먼트1의 다음 형제인 자식엘리먼트2를 가지고 있음

현제엘리먼트.Lastchild.PrevioustSibling

첫 번째 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트4의 이전 형제인 자식엘리먼트3을 가르킴

현제엘리먼트.ChildNodes

현제 엘리먼트의 자식을 가르킨다(속성자료형 XmlNodeList)

자식엘리먼트1,2,3,4 모두를 가지고 있음

컬렉션이기 때문에 ChildNodes[인덱스값]으로 노드들을 하나씩 가져올 수도 있다

 

 

 

 

 

XmlElement의 상속 계층구조

 

 

속성관련

XmlElement.HasAttributes

해당엘리먼트의 속성이 있는지 true/false값을 반환

XmlElement.Attributes.Count;

해당엘리먼트의 속성의 갯수가 몇개인지 int형으로 반환

XmlElement.GetAttribute("속성명")

해당엘리먼트의 속성이 "속성명"과 같은 속성의 값을 반환

XmlElement.Attributes

해당엘리먼트의 속성들의 컬렉션을 반환(XmlAttributeCollection)

 

이전 정리에서는 XmlReader 클래스로 XML문서를 읽어 오거나 문자열을 읽어와 그 것의 노드를 읽어가며 값을

검색해서 출력했다.

 

이번에는 XmlWriter 클래스를 이용해서 지정된 경로에 XML문서 파일을 하나 생성해보겠다.

 

 

private void btnXmlWriter01_Click(object sender, EventArgs e)
{
string imgPath = @"..\..\images\naver.gif";
FileStream fs = new FileStream(imgPath, FileMode.Open);
int count=(int) fs.Length;//이미지 바이트 수
byte[] buffer = new byte[count];
fs.Read(buffer, 0, count);//0번째부터 갯수만큼 버퍼에 담아두겠다.
fs.Close();
string path = @"c:\wbooklist.xml";
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;//들여쓰기

XmlWriter writer = XmlWriter.Create(path, settings);
writer.WriteStartDocument();

writer.WriteDocType("booklist", null, "booklist.dtd",null);


//PI
writer.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href=Ex48.xslt'");


writer.WriteComment("booklist 선언부분");
//==> <booklist>
writer.WriteStartElement("bml","booklist","http://tempuri.org/booklist.xsd");//네임스페이스
writer.WriteComment("booklist 선언부분");
//<book>
writer.WriteStartElement("book");
//id,kind속성추가
writer.WriteAttributeString("id", "b001");
writer.WriteAttributeString("kind", "컴퓨터");
//<title>
writer.WriteStartElement("title");
writer.WriteString("Java 기초");
//</title>
writer.WriteEndElement();
//author :홍길동
writer.WriteElementString("author", "홍길동");//
//description
writer.WriteStartElement("description");
writer.WriteCData("<xml>교재 샘플!");
writer.WriteEndElement();

//img
writer.WriteStartElement("img");
//writer.WriteString("naver.gif");
writer.WriteBase64(buffer, 0, buffer.Length);
writer.WriteEndElement();

//</book>
writer.WriteEndElement();
//==> </booklist>
writer.WriteEndElement();


writer.WriteEndDocument();
writer.Close();
}

img파일을 바이트 배열인 buffer에 담아두고 밑에 img엘리먼트 선언 부분에서 값으로 넣을 것이다.

settings.Encoding = Encoding.UTF8;은인코딩 방식을 UTF8방식으로 쓰겠다 이며
settings.Indent = true;은 들여쓰기 사용 여부이다.

 

XmlWriter의 Create로 객체를 생성 할때 인자로 XML파일이 생길 위치와 생성할 때의 설정값인 settings를 넣어줘서 생성한다.

 

WirteStartDocument()은 XML문서에서

<?xml version="1.0" encoding="utf-8" ?>즉 declaration에 해당하는 부분으로 문서의 시작부임을 명시적으로 알린다. 생략도 가능하다.

 

WriteDOcType() 은 XML문서에서

<!DOCTYPE booklist SYSTEM "booklist.dtd"?/>에 해당하는 부분이다.

WriteProcessingInstruction()은 프로세싱 지시자를 말한다.

 

WriteComment ()주석을 만드는 함 수 이다.

 

WriteStartElement()엘리먼트의 시작을 나타내며 WriteEndElement()엘리먼트가 닫히기 전에 WriteStartElement()이 나오면 자식으로 인식하고 WriteAttributeString()가 나오면 속성이 된다.(스샷을 보면 이해가 됨)

주황색처럼 선언하게 되면 첫번째 인자는 접두사가 되고, 두번재 인자는 엘리먼트 명 , 세번째 인자는 네임스페이스 포함해서 선언하게 된다.

 

WriteString()함수를 사용해서 태그 사이에 값(innerText)을 설정해 준다.

 

WirteCData() <![CDATA[<xml>교재 샘플!]]>부분에 해당하는 것으로 대괄로 내부의 내용은 XML에서 태그로 인식하지 않는 부분이다.

WriteBase64() 지정된 이진 바이트를 Base64로 인코딩하고 결과 텍스트를 작성한다.

 

WriteEndDocument()로 문서의 끝을 명시적으로 끝내고, Close()로 writer객체를 닫는다.

 

결과값

 

 

 

 

사용될 XML문서

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
<!--<writer>사람</writer>-->
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

 

 

 

 

 

 

책제목 가져오기

 

private void btnXmlReader05_Click(object sender, EventArgs e)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(this.uri, settings);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&

reader.Name == "title")
{
//그 다음의 노드의 Value값을 출력
//reader.Read();//코딩으로 다음 노드로 이동
//Console.WriteLine("책 제목 : {0}",reader.Value);

//ReadElementString(); 위에 코딩을 한줄로~
Console.WriteLine("책 제목 : {0}",

reader.ReadElementString());
}
}
reader.Close();
}

NodeType이 Element이고 그 엘리먼트의 이름이 title인 노드의 값(Value)를 출력한다.

주석있는 부분은 3줄 코딩이 필요하지만

ReadElementString()를 이용하면 한줄로 작성 가능하다.

개념만 알고 있다면 둘다 좋은 코딩이니 선택해서 하면 되겠다.

 

실행결과

 

 

 

 

 

 

 

 

해당 엘리먼트노드의 속성 노드 값 출력하기

 

 

private void button1_Click(object sender, EventArgs e)
{
XmlReaderSettings setting = new XmlReaderSettings();
setting.IgnoreWhitespace = true;
setting.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(this.uri, setting);
while (reader.Read())
{
if (reader.HasAttributes && reader.Name == "book" &&

reader.NodeType==XmlNodeType.Element)
{
while (reader.MoveToNextAttribute())
{
Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
}

}
}
}

속성을 가지고 있는 엘리먼트 타입의 book인 노드를 선별하고

다시 while문에서 MoveToNextAttribute()를 사용해서 속성들이 있다면 첫번째 속성으로 이동한다. 또 다른 속성이 있다면 while 문에서 MoveToNextAttribute()함수가 다음 속성을 가리키게 되며 다음 속성이 없다면 false값을 반환하여 while문을 빠져나온다.

실행결과

 

DTD유효성 검사하기

<?xml version="1.0" encoding="utf-8" ?>
<!--<!DOCTYPE booklist SYSTEM "booklist.dtd">-->
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
<writer>사람</writer>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

주석을 하고 안하고에 따라 유효성 검사 성공/실패가 바뀐다.

 

 

 

 

 

 

public bool vaild;
private void btnXmlReader03_Click(object sender, EventArgs e)
{
//DTD유효성 검사
XmlReaderSettings settings = new XmlReaderSettings();
//공백writespace무시
settings.IgnoreWhitespace = true;


//DTD 유효한 문서인지 체크
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);

XmlReader reader = XmlReader.Create(this.uri, settings);
this.vaild = true;
while (reader.Read())
{
}
reader.Close();
if (this.vaild)
MessageBox.Show(">>유효한문서입니다");
}

XmlReaderSettings 개체를 만들어 읽기 작업을 할때 필요한 필터링?을 셋팅한다.

DTD가 참조된 모든 XML문서는 반드시 settings.DtdProcessing = DtdProcessing.Parse;
을 해줘야 한다. 그렇지 않으면 에러가 난다.

 

이때 ValidationEventHandler 로 유효하지 않은 이벤트가 발생하면 이벤트 핸들러로 처리할 수 있도록 설정한다.

 

void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
{
MessageBox.Show("DTD 검사 유효하지 않은 문서입니다\n"+e.ToString());
this.vaild = false;
}

 

system.xml.dll 어셈블리 안에 있다.)

System.Xml

XML을 다루는 핵심 클래스

System.Xml.XPath

XPath를 다룰수 있는 클래스들이 선언되어 있다.

System.Xml.Schema

Xml Schema 관련 클래스

System.Xml.Xsl

XSLT 관련 클래스

 

2. XmlReader/XmlWriter 클래스

XmlReader

스트림을 통해서 xml문서를 읽을 수 있는 메서드와 속성들이 있다.

(특징 : 빠른 순차접근,읽기전용커서)

XmlWriter

xml 문서로 저장하거나 스트림 형태로 보내는 메서드와 속성 제공.

 

 

 

 

 

 

 

주의) 두 클래스는 추상 클래스이므로 반드시 Create() static메서드를 이용해 객체를 생성해야 한다.XmlReader는

StreamReader처럼 항상 한 방향으로만 순차 진행을 하기 때문에 뒤로 돌아 갈 수 없다.

예제1)

<?xml version="1.0" encoding="utf-8" ?>
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

사용될 XSL문서이다.

string uri = @"..\..\files\booklist.xml";

private void btnXmlReader_Click(object sender, EventArgs e)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create(uri,settings);
while (reader.Read())
{
Console.WriteLine("{0,-10}{1,-10}{2,-10}", reader.Name, reader.NodeType, reader.Value);
}
reader.Close();
}

XmlReader객체를 Create()메서드를 사용해서 만들고 만든 객체의 Read()함수를 호출한다. 이 함수는 다음 노드로 움직이면서 읽을 노드가 있으면 true를 반환하고 없으면 false를 반환 한다.

while문 내부에서는 객체의 이름과, 노드 타입, 값을 출력한다.

끝에는 반드시 Close()로 닫아준다

 

 

예제2)

private void btnXmlReader02_Click(object sender, EventArgs e)
{
string xml = "<?xml version='1.0' encoding='utf-8' ?>";
xml += " <booklist>";
xml += "<book id='b001' kind='컴퓨터'>";
xml += "<title>C#</title>";
xml += "<author>홍길동</author>";
xml += "<price unit='원'>25000</price>";
xml += "</book>";
xml += " </booklist>";

StringReader sr = new StringReader (xml );
XmlReader reader = XmlReader.Create(sr);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}

}
reader.Close();
sr.Close();
}

 

 

[문제점]

VS 2010 SP1을 설치하고 나서, MFC 어플리케이션을 만들고 나서,

MFC 클래스를 추가할려고 하면, 아래와 같은 메시지가 발생하면서, 클래스가 추가되지 않는 경우가 발생하였다.

[해결]

구글링을 해봤더니.. 뭐 레지스트리가 꼬여서 생긴 문제라는데…

VS 2008/2010을 같이 설치하는 경우에 경로가 꼬여서 생기는 거란다..

레지스트리를 수정하는 방법도 있지만…

걍 간단하게..

  1. 아래 경로에서 RC.EXE, rcDLL.DLL을 카피한다.

    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin

  2. 아래 경로에 복사해 넣는다.
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin

그럼 간단하게 해결!! 뭐.. 결국은 파일을 제대로 못찾아서 생기는 문제니까.. ^^

C# MySQL 데이터 가져오기

 

지난글에서 MySQL 서버에 접근하는 방법을 알아 보았는데요.

오늘은 데이터를 가져오는 방법을 알아보겠습니다.

 

순서가 조금 복잡해 보일 수도 있지만 한번만 해보시면 굉장히 쉬울 거에요..^^

자 시작해볼게요..^^

 


솔루션 탐색기에서 새 항목을 추가해 주세요.

 


ADO.NET 엔터티 데이터 모델을 추가해 주세요.



엔터티 데이터 모델 마법사 창이 뜨면 데이터베이스에서 생성을 선택해주시고 다음을 눌러주세요.



서버는 지난번에 알려드린 방법으로 만들어 놓은걸 선택해 주시구요.



미리 수정을 안하고 네이버에서 수정했더니...-0-

어쨋든 가져올 테이블을 선택해 줍니다~



그럼 위 그림처럼 Model.edmx 가 생기면서 테이블이 추가 된답니다.



그리고 나서 메인 메뉴에 새 데이터 소스 추가를 눌러 주세요.



데이터 소스 구성 마법사가 뜨면 개체를 선택해 줍니다.



그리고 나서 솔루션 선택해주시고 namespace 선택해주시면 아까 추가해놓은 데이터가 나온답니다.

그럼 그 데이터를 선택해 주세요.



그러고 나면 데이터 소스창에 데이터가 추가 된게 보인답니다.



이녀석을 끌어서 폼에다가 추가해주면 자동으로 데이터 그리드 뷰가 생성이 된답니다.

열 이름도 자동으로 만들어 지는걸 보실 수 있으실 거에요.



이 데이터 그리드 뷰 속성에 보시면 DataSource 부분에 미리 아까 끌어왔던 데이터개체이름바인딩이 입력되있는걸 보실 수 있으실 거에요.

 

그럼 F5 를 눌러서 실행해 볼게요.

 

 

그럼 데이터가 아무것도 없답니다.

아직 서버에서 자료를 안가져 와서 그렇답니다.

그럼 자료를 가져와 볼게요.

public partial class Form1 : Form
{
joa44Entities DB = new joa44Entities();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
xe_action_forwardBindingSource.DataSource = DB.xe_action_forward;
}
}

위에처럼 소스를 입력해주고(물론 위에 과정에서 엔티티 이름이라던가 테이블 이름이라던가 이런건 수정해서 입력해 주세요~)

다시 F5를 눌러서 실행해주면~~


 

MySQL DB 의 데이터가 쏙~~~~들어와져 있는걸 보실 수 있답니다.^^

 

자 그럼 다음에는 LINQ 를 사용해 MySQL 데이터를 사용하는 방법을 알아볼게요~

C# MySql 연동 사용.

-발췌-

 

 

C# Visual Studio 2010 MySQL 사용하기

C# 에서 MySQL을 사용하는 방법을 알아볼게요.

우선 필요한 프로그램이 있답니다.

http://dev.mysql.com/downloads/connector/net/

에서 다운 받아주세요.

빨간 테두리로 된 부분 클릭 하셔서 다운받고 쭉~~~설치 해주시면 된답니다.

Visual studio 로 와서요~

서버 탐색기에서 연결 추가를 눌러 줍니다.

그럼 연결 추가가 나오는데요.

요기서 변경을 눌러 주세요.

그리고 데이터 소스에서 MySQL Database 를 선택해 주시고

확인을 눌러주세요

Server name 이랑 User name 이랑 Password 입력하시면

데이터 베이스를 선택하실 수 있는데요

그런 데이터 베이스 골라주시고

확인 눌러주세요.

그리고 나면 서버 탐색기에 MySQL 데이터베이스가 추가가 된답니다..^^

요기까지 굉장히 쉽죠..^^

앞으로도 쉬울거에용..ㅎㅎ

참조 추가해서 사용하는 방법도 있는데,

이방법이 MySQL 사용하기에 훨씬 쉬운 방법인것 같네요~~

그럼 다음글에서 활용방법에 대해 알아볼게용.

C# MySql 연동방법

발췌.

 

 

-------------------(이 글은 MKEX's 닷넷 커뮤니티에서 퍼온 글입니다.!)----------------

닷넷기반 언어(C#,VB.NET 등)로 작성한 프로그램의 실행 흐름을 살펴 봅니다.
아래는 실행흐름을 개괄적으로 표현한 그림입니다

1. 우리 같은 프로그래머가 열쒸미 컴터 앞에서 삽질을 합니다.

2. 프로그래머가 작성한 소스 코드 입니다(C#)

3. C# 컴파일러가 소스코드를 컴파일 합니다.
언어별로 다른 컴파일러가 동작합니다. 여기선 csc.exe 라는 C# 컴파일러 입니다 (VB.NET 의 경우 vbc.exe 가 되겠지요)

4. 이렇게 컴파일 되어 파생되는 결과 파일은 exe 또는 dll 파일이 됩니다.
단, 닷넷에서는 자바의 중간 바이트 코드와 유사하게 MSIL (CIL) 이라는 중간언어로 컴파일 됩니다.
즉, 바로 실행가능한 파일이 아니라는 말입니다.
자바의 플랫폼 독립성을 위해 중간 바이트 코드가 필요 했듯 닷넷에서도 플랫폼 독립성과 언어 통합을 위해
중간단계를 거치게 되는 것입니다.
참고로 언어 통합이란 닷넷의 장점 중에 하나인데요.. C# 코드이든, VB.NET 코드이든 소스코드는 달라도
컴파일 되어 파생되는 중간언어(IL코드)는 완전히 동일하게 됩니다.
이 결과로 각기 다른 언어로 작성한 닷넷 소스라 할 지라도 상호 작용이 가능하게 되는 것입니다.
또한 이 exe (or dll) 파일에는 소스코드내의 클래스를 설명하는 메타 데이터와 매니페스트정보가 포함됩니다

5. 4번에서 만들어진 중간언어는 실제 실행시 실행단계로 넘어 갑니다.

6. 이제 부터 그 유명한 CLR 의 영역인데요..
CLR 은 4번에서 컴파일된 중간코드를 실제로 실행시키기 위한 각종 서비스들의 모음이라 할 수 있습니다.
다시 말해 닷넷으로 만든 프로그램의 실행환경을 제공하는 것입니다.
실행을 위해 IL 코드가 CLR로 호스트 될때 제일 처음 CLR 내부의 Class Loader 에 의해 클래스들의 레이아웃 로드와
메타데이타를 로드하여 중간 여러 과정을 거쳐(타입체크,마샬링등 <- 이과정은 여기서 생략됩니다) 메모리에 로드합니다.

7. 메모리에 올라간 어셈블리는 실행되는 컴퓨터가 (플랫폼) 이해(처리) 할 수 있는 명령어(Native Code) , 즉 플랫폼 종속적인
원시 코드로 컴파일 되는데 , 이때 JIT 라는 컴파일러가 관여 합니다.
JIT 컴파일러는 jitter(지터)라는 애칭을 가진 컴파일러로써 IL 코드를 특정 플랫폼 기반의 원시코드롤 컴파일을 해주는 놈입니다.

8. 7의 과정에서 탄생한 원시코드(Native Code) 입니다.
Native Code 는 다 아시다 시피 컴퓨터가 처리 할 수 있는 컴퓨터용 코드 입니다.

9. jitter 에 의해 컴파일된 Native Code 는 다음번 사용을 위해(재사용) 메모리에 캐싱됩니다.
따라서 동일한 어셈블리를 실행할때 또 다시 컴파일 하는 단계를 줄임으로써 실행속도의 향상을 꾀합니다.
즉, 다음번 실행시에는 MSILI 의 컴파일 단계가 생략 됩니다.

10. 이제서야 우리는 우리가 작성한 프로그램을 모니터를 통해 눈으로 확인 할 수 있게 되었군요..

수고하셨습니다~~

 

+ Recent posts