안녕하세요 삽잡이입니다.
이번 시간에는 자동으로 사용하는 비연결 계층에 대해서 알아보겠습니다.
사실, 지난 시간까지
DataTable을 만들고... Adapter를 추가하고... DataColumn을 추가하고... 등등...
DB 한번 쓰기 참 힘들었죠...
그런데, MS에서는 이 비연결 계층 방식으로 DB를 사용할 때에
자동으로 '강력한 타입'의 DB 코드를 제공해줍니다.
[서버 탐색기] > [데이터 연결]을 통해 사용하고자 하는 DB를 연결하고,
데이터 집합이라는 파일을 만듭니다.
'xsd' 확장자의 데이터 집합 파일을 만들게 되면,
이제 비연결 계층의 기능을 자동으로 제공해주게 됩니다.
[서버 탐색기]로 부터 열어놓은 Table들을 드래그를 통해서 쉽게 만들 수 있게 되지요.
굉장히 편리하지 않습니까?
Table들을 자동적으로 관계를 지어주고 모든 코드들을 만들어줍니다.
해당 파일을 우리는 'DataSet 디자이너'라고 부를 수 있습니다.
어떻게 코드를 만들어줬는지 실제 코드를 확인해보겠습니다.
지금까지 일일히 작성했던 DataSet을 비롯하여, DataTable, DataColumn, DataRow 등의 코드들이
모두 자동으로 구현됩니다.
여기서 중요한 Namespace 두가지에 대해서 소개하고자합니다.
우선, DataSet의 네임스페이스입니다.
자동으로 만들어진 DB에 대한 DataSet은 System.Data.DataSet을 상속받습니다.
해당 클래스는 범용적이기 때문에
즉, 다른 셋들에서도 모두 사용할 수 있는 범용적인 타입입니다.
그런데, 해당 기능을 상속받아 형식에 맞는 '강력한 타입'으로 만들어준 것입니다.
이 강력한 타입은 실제 테이블들과 모두 매핑되어있기 때문에 실제 타입을 반환해줍니다.
즉, 테이블을 다루게 되더라도 강력한 타입으로 상속을 받았기 때문에,
자동으로 강력한 타입을 만들어놓는다는 것입니다.
또한, DataSet을 다루기 위한 클래스 외에도
어뎁터를 관리하는 중요한 네임스페이스도 제공해줍니다.
이렇게, 메모리상에 만들어지는 DB에 대한 DataSet과 Adapter에 대한 내용이 만들어집니다.
Adapter는 메모리 DB가 아닙니다.
메모리 DB와 실제 DB를 인터페이스하기 위해 따로 네임스페이스로 존재하게 되는 것이죠.
해당 Adapter 클래스 안에는
내부적으로 실제 어뎁터들을 가지고 있습니다.
어뎁터는 커넥션 객체를 가지고 있고, 트랜잭션, 명령 컬렉션등을 가지고 있습니다.
이제, 실제적으로 기능을 사용할 Client 코드영역에서는 using을 통해
네임스페이스 두개를 사용할 수 있습니다.
실질적으로 모두 자동으로 구현되기 때문에 사용만 해주면 됩니다.
DataTable 형식이 아닌,
실제 테이블 형식의 테이블과 어뎁터에 대한 객체를 얻을 수 있습니다.
반복해서 말씀드리지만,
이전에는 그냥 DataTable 형식이었기 때문에 각각의 테이블 및 컬럼 등을 나타낼 수 없었습니다.
그런데, 강력한 타입들은 이미 타입에 맞게 모두 다 작성해놨습니다.
이를 통해 '타입 안전성'을 높여줬지요.
왜냐? 실제 타입에 해당하는 데이터만을 컴파일 타임에 확인할 수 있지 않겠습니까?
쿼리를 던질 수 있는 전용 어뎁터 또한 만들 수 있습니다.
일반적으로 프로시저를 호출할 때 사용하는데,
아까 소개했던 것과 같이 드래그를 통해 만들 수 있습니다.
비연결형은 다른 프로그래밍 언어에는 제공해주지 않습니다.
MS의 것이지요.
이를 자동화 시켜주기 위해 만든 것입니다.
비연결형 DataSet이 없다면, 이런 제공이 없었을 것이고 굉장히 어려웠겠지요.
데이터를 넣고, 빼고, 수정하는게 목적이지
데이터 설계에 대한 목적이 강하지 않기 때문에 이렇게 제공해주는 것입니다.
하지만, 문제 발생시에 원인 해결을 위해서는 이런 자동화 방법 말고도
이전 시간에 배웠던 내용들도 반드시 숙지하시길 바랍니다.
이번 시간은 여기까지 하도록 하겠습니다.
이상 삽잡이였습니다!
<참고 : C# and the .NET4 Platform>
'삽질의 현장 > - .NET' 카테고리의 다른 글
#096_닷넷(.NET)_ WinForm - WinForm Intro (0) | 2015.11.21 |
---|---|
#095_닷넷(.NET)_ ADO.NET - 비연결 계층 LINQ (0) | 2015.11.21 |
[삽잡이::C#] ADO.NET_View (0) | 2015.11.20 |
#093_닷넷(.NET)_ ADO.NET - 비연결 계층 코드 (0) | 2015.11.20 |
#092_닷넷(.NET)_ ADO.NET - 비연결 계층 개념 (0) | 2015.11.20 |