PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataSet...Access-mdb화일 DB작업

그동안 배열, XML화일, 엑셀화일, 텍스트화일등을 데이타소스로
활용하여 보았다
실은 본격적인 데이타소스는 DB가 되어야 하는 것이 바람직할 것이다
그래서 DB중에서는 이렇게 테스트하고 학습하기 가장 좋은
억세스의 NorthWind.mdb화일을 사용하도록 하자..
VisualStudio 2008에서는 에러가 자꾸나서..이것을 수리하려면
써비스팩같은 것도 다운 받아 깔아야 하고,복잡하니..2010버전으로 하도록 한다
데이타베이스가 관계의 설계만 잘 되어 있다면 아주 거저먹는
작업이 VB.Net의 윈도우 프로그래밍이다
마우스 몇번 움직이고 속성설정 좀 하면 아하..알아서 다 해주는군!!
소리가 나게 된다
문제는 DB의 테이블간의 관계가 얼마나 잘 이루어졌는지가 문제이지만
Northwind.mdb화일은 이미 관계에 대한 설계가 완벽한 것이라서
이것을 끌어다 사용하는 입장에서는 문제가 하나도 없게 되는 것이니..
DB에 관심이 있다면 무조건..이것..저것 뒤적거리지 말고
Northwind.mdb화일의 관계를 완전히 이해하고 이 것을 흉내내면
왠만한 일에 대한 관계테이블을 구성하는데는 문제가 없다
영어던 뭐든 때려잡으려면 하나를 죽자고 해면 된다
이것 저것 뒤적거리면 Get Nothing!! 이다

앞의 페이지에서는 DataSource를 프로그래밍적으로
갖여 왔지만 손으로 해보도록 하자

아래의 내용을 하나,하나 똑같이 해보시기 바란다
Visual Studio 새 윈도우프로젝트를 하나 열고..



제일 중요한 것은 DataSource...!!! 순서대로 마법사를 진행하면 메모리상의 DB 인 DataSet을
만든다..
이제 데이타소스중에 가장 중요한 것은 데이타베이스와의
연결...Connection...뭐가 연결이 되어야 뭘 하든가 말던가
하는 것!! 잊지 마시고..항상 Connection!!!...연결!!



그림과 같이 억세스의 NorthWind.mdg화일을 찾아서 연결한다
확인 버튼을 크릭후 돌아가서 Connection String을 열어보면
아래와 같은 연결정보가 구성되어 있음을 알수 있다

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\IPOD\XL-Weekly\northwind.mdb

이것은 DAO나 ADO에서 연결하기 위한 연결정보로 사용하였던
기억이 나시면 다행..
프로그래밍적으로 접근한다면 위의 연결정보를
Connection개체에서 사용하면 되는 것이다

연결 마법사를 최종 확인 하면
아래와 같은 메시지박스가 나타난다..



공교롭게..영문버전을 사용하는 바람에 ..좀 헷갈리시겠지만...
께임같은 것은 모두 영어로 된 것을 하시면서..
이것은 영어라서 헷갈릴일이 없을 것이고..
현재 연결된 mdb화일은 프로젝트에 포함되지 않았는데
포함시키겠냐는 이야기다..
프로그램을 배포하게 되면 포함시켜서 하는 것이 좋은 것이니
포함시키겠다고 확인 하면..
마법사의 마지막 창..현재 연결된 Northwind.mdb화일의
테이블목록과 쿼리테이블 목록이 나타난다



테이블만 모두 사용하겠다고 체크해주면
프로젝트내의 DataSet에 체크한 테이블이 모두
DataTable이 되는 것이다

그렇게 하면 프로젝트창(소루션창)에 해당 mdb의 복사본이
아래와 같이 옮겨진다



이제 데이타베이스와의 연결..테이블의 구성이 모두 완료되었다
이제 마우스로 실실..끌어다 놓으면 된다

위의 내용은 억세스뿐만 아니라..SQL써버도 마찬가지 요령이다
참으로 쉽다..

문제는 연결한 테이블의 구조를 어떻게 이해하고 있는지가
문제인 것이다
연결하는 것은 위와 같이 별 어려운 것이 하나도 없다
DB와는 연결했는데..테이블의 구조를 모른다면 깝깝해진다..
NorthWind.mdb화일의 테이블구소를 이해하면서 이야기를
전개해 보도록하자!!
우노도 컴맹..초보때..NorthiWind.mdb를 똑같이 몇번을
만들어 보면서 테이블의 구조를 파악했었다..
모를때는 이해가 될때까지 똑같이 만들어 보는 것이 가장
빠른 길이다

DataSource 창에 있는 테이블을 주욱 살피면서
테이블간의 관계가 머리속에 그려져야 하는 셈이다
여러분이 데이타베이스를 잘 이해하고 활용하고 싶다는 것은
다른 말로 바꾸면 일을 잘하고 싶다는 생각과 같은것이다
어떤 일에 있어서 데이타베이스 테이블이 머리속에 그려진다고
하는 것은 일에 대한 프로세스를 좌악 뚫고 있는 셈이다
일에 대한 프로세스를 몸으로 하고 말로 할 때는 좌악 훑고 있어도
테이블 구성을 못한다면 이것도 문제인 것이고
데이타베이스에 대한 개념이 선 사람들이다!!
라고 하는 것은 일에 대하여 무척 논리적인 사람들이라는 소리다
서양사람들이 데이타베이스의 개념이 우리보다 잘 정리 되어 있다고
하면 화를 내시려나????
그들이 회사에 들어갈 때 면접에서 제일 먼저 나오는 화두는..
How well is he organized????이다
얼마나 정리 정돈이 잘된 사람인가???
정리정돈은 곧 데이타베이스인 셈이다
이것이 저것과 관련이 있고 저것이 이것과 관련이 있다는
관계셩을 꽤뚫고 있어야 일을 잘 한다
멍청한 인간들은 하나만 딥다 고친다...관련된 다른 것에
어떤 영향이 있을지 염두에도 없다!!

DataSource창에서 Customer 테이블을 보자 이 것을 크릭하면 Customer테이블을 구성하는 휠드명이 주욱 나타난다



Customer 테이블을 구성하는 휠드의 맨밑에 어라..또 테이블이 나타난다
Orders 테이블이다..그래서 크릭하니..Orders테이블의
휠드명이 좌악나타나고 맨밑에 또 Order Details 이라는 테이블이
또 나타난다..

이것이 무엇을 의미하느냐...
하나의 고객(customer 테이블)이 물건을 여러번 살수 있다는 것을
의미하는 것이다
하나의 고객이 Orders테이블에 많은 기록을 남길수 있다는 이야긴것이다
또 하나의 Orders테이블에서는 한번의 거래가 기록이 된다
그런데 한번의 거래에는 또 여러가지 품목을 살수 있을 것이다
그러니 하나의 거래기록은 여러개의 거래내역이 나타날 것이고
이거래내역만 모아 놓게 되는 것이 바로 Order Details테이블에서
보관하게 되는 셈이다
Order Details테이블은 누가 샀는지, 누가 팔았는지, 그런 것은 없다
어떤 품목을 (품목의 ID만 기록)어떤 가격에 몇개의 수량으로
팔았다는 것만 관리하면 된다..
누가 샀던, 누가팔았던 신경 안쓴다..

철저하게 독립적이다..
독립적이면서 상호의존적이다..좋은 인생철학과 같다
여기에도 적고, 저기에도 적고, 두리뭉실은 문제를 풀기가 힘들다
그래서 하는일을 데이타베이스적 관점으로 본다는 것은
참으로 바람직한 사고습관이 되는 셈이다

프로젝트창(소루션창)에서 xsd확장자로 된 northwindDataSet.xsd화일을
열어 보면 아래의 그림과 같다



억세스테이블을 몽땅 끌고 들여 오면서
억세스의 테이블관계를 읽고 그대로 테이블간의 관계
테이블의 휠드내용등을 그대로 복원시켜 정보창고의 틀을 만들어
놓은 것을 볼 수 있다
테이블의 구조와 관계의 설계도 일뿐(스키마) 데이타가 들어와 있는것은
아니다
이 화일을 삭제하면 DataSource창의 내용과 더불어 모두 사라진다
삭제잘못하면 다시 불러들이면 되는 것이니..뭐 걱정할 것도 없고..

이제 필요에 따라 이곳에 정보가 채워지게 된다
정보를 채워보자

아래의 그림과 같이 DataSource 창에서 Customer테이블이름의 오른쪽가장자리를
크릭하면 콤보상자가 나타난다 , 이 곳에서 [Detail]을 선택한후



선택후 Customers테이블명을 윈도우 창으로 마우스로 끌어다 놓는다
아래와 같이 알아서 무언가 잔뜩 만들어 놓는다
초보님들은 뭐가..뭔지 황당하고 헷갈린다
하지만 앞페이지에서 슬슬 바람잡으면서 몰고온 결과에 소득이 있다면
하나도 낯섫지 않은 이름들이다



XML화일에서 저장을 할때..WriteXML메소드를 사용하여
데이타소스를 저장하였던 기억이 날것이고..
데이타베이스작업에서 데이타소스에 정보를 주고 받고 관리를
하는 녀석이 바로 TableAdapter이고 Customer테이블을 전문적으로
써버와 연락을 주고 받을 녀석이라서 Customer라는 이름을 붙여서
CustomerTableAdapter가 되는 것이다
그럼 이녀석이 마우스로 끌려 오면서 한일이 무엇인지를 보자
윈도우폼에 자동으로 작성된 코드를 보면

Private Sub Form1_Load(ByVal sender As System.Object, _
							 ByVal e As System.EventArgs) Handles MyBase.Load
							 
    Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
    
End Sub

tableAdapter의 Fill 메소드로 DataSet의 테이블중의 하나인
Customers테이블에 정보를 채워준 것이다
지금 채워준것이 아니고 윈도우폼이 실행된때 (Load 이벤트)
TableAdapter가 데이타를 불러다가 채워넣는 것이다
이제 Customers테이블(DataTable개체)에는 정보가 들어가게 되는 것
그냥 실행시켜보면 데이타의 내용을 주욱 볼 수 있을 것이다
앞페이지에서 DataTable에 무언가 채워줄때 작업을 이것 저것했던
기억이 날 것이다..
TableAdpater는 이렇게 그냥 알아서 Fill메소드 하나로 줄줄이 채워주었다
그럼 Fill메소드의 코드는 어디에 작성되었을까??



이제 확실해졌다..
TableAdapter밑에 Fill과 GetData메소드두개의 이름이 있고..
더불어서 다른 모든 작업도..
아하..삭제를 하던 수정을 하던..입력을 하던..
새로운 데이타를 갖여 오던..TableAdapter에게 일을 시키면
되겠구나??!!!
물론 TableAdapter에 원하는 작업을 직접 코딩을 하게 된다
즉 TableAdpater에 위와 같이 생성되면서 하는 기본적인 일외에
특수한 정보의 요구사항을 직접 코딩하여 TableAdapter의
메소드로 추가 시켜나가면 되는 것이다

너무 이야기기 기니..다음 페이지로 가자