삽질의 현장/- .NET

#092_닷넷(.NET)_ ADO.NET - 비연결 계층 개념

shovelman 2015. 11. 20. 08:17


안녕하세요 삽잡이입니다.


이번 시간 부터는 '비 연결 계층'에 대해서 알아보려고합니다.


연결 계층에서는 DB와 연결해좋지 않은 상태에서는

DB 프로그램을 할 수 없었습니다.

즉, DB에 대해서 가져오거나 수정등을 할 때에는 

직접 테이블에 있는 내용에 명령을 내렸었다 이겁니다.

모든 것을 다 데이터 원본을 대상으로 동작했었죠.


비 연결계층은 DB와 연결해놓지 않은 상태에서 DB 프로그램을 하는 것을 말합니다.


개념적으로 표현해보겠습니다.


 


비 연결 계층은

쉽게 말하면, 원본 DB Source를 APP에 복사본을 뜨는 것입니다.

즉, DB를 DB 그대로의 메모리상에 DB로 옮긴다는 것이죠.

따라서, DB 프로그램을 할 때에는 DB 원본과 이야기를 하는 것이 아닙니다.

왜냐? 메모리상에 DB와 이야기할 것이기 때문이지요.


내가 하고자하는 동작은 APP에 있는 DB와 읽고 쓰기를 한다 이겁니다.


메모리상에 DB를 옮겼다는 핵심에 의해서

'Data Set'이라는 클래스 형식으로 불립니다.


사실, 메모리 상의 DB에 변경이 적용됬다면

DataSet에 변경만 했을 뿐 원본에는 아무 영향이 없습니다.


APP이 도중에 죽어버리면 변경했던 것들이 모두 다 날라가버리겠지요.

따라서, 이를 적용시켜주거나, 다시 원상태로 복구시켜주는 작업을 해줘야합니다.

이러한 작업을 해주는... 

즉,  Interface 역할을 해주는 객체가 있는데

이 객체가 바로 'DataAdapter' 객체입니다.


아하! 

DataSet과 DB는 DataAdapter에 의해서 연결되어지는 것을 확인할 수 있군요.


이 DataAdapter 에서 DB 원본을 APP의 DataSet으로 복사하는 과정을 

Fill() 메서드에 의해서 수행합니다.

또한, APP의 내용을 DB원본에 옮겨 쓸 때에는 

Update() 메서드를 사용합니다.



또한, 테이블을 메모리 상의 테이블로 표현해줘야합니다.

테이블 상에 실제 DB에 존재하는 테이블을 표현하는 형식은 

바로, 'DataTable' 입니다.


Table 내에는 Column과 Row라는 핵심적인 요소들이 있지요.

이들을 표현하는 객체들이 'DataColum', 'DataRow'이죠.

그리고, Table은 관계를 가질 수 있는데, 

이 관계에 대해서 DataRealtion 객체로써 표현합니다.


정리해보겠습니다.

비 연결형 계층은 Select 명령에 의해서 원본에 있는 내용을 모두 다 가져옵니다.

그리고, DataAdapter 객체의 Fill() 메서드를 통해 그 안에 데이터를 모두 읽어옵니다.


그 뒤에 Select, Insert, Delete, Update 명령들을 

모두 APP에 있는 DataSet을 대상으로 수행하지요.


따라서 비 연결형 계층인것입니다.

DB 소스와 이야기하지 않는다는 것이지, 연결을 아에 끊어버린다는 것은 아니니

참고하시길 바랍니다.



데이터 셋은 테이블의 컬렉션,

관계에 대한 컬렉션, 속성의 컬렉션을 가지고 있습니다.


이 데이터 셋에는 중요한 메서드 두가지가 있습니다.

(물론 더 있을 수 있겠지만요...)

바로, AcceptChanges(), RejectChanges() 메서드입니다.


해당 메서드들은 변경된 것들에 대해서 확정을 짓던지,

변경된 것들을 다시 되돌리겠다는 기능을 가지고 있습니다.


실제 DB가 아닌 DataSet과 이야기를 하고 있기 때문에,

이를 실제 DB 원본에 변경된 내용을 원상태로 되돌릴 수 있다는 것입니다.

DataSet의 실질적인 데이터는 테이블에 대한 핸들밖에 없기 때문이죠.


아무튼... 두 메서드 모두 변경사항들을 없애는 것입니다.

원상태로 되돌리거나, 적용시켜 변경사항을 없는 것처럼 만든느 것이지요.


물론, DataTable에도 이런 기능이있습니다.

자신의 테이블에 있는 Row들의 집합을 원상태로 되돌릴 수 있지요.



테이블의 스키마라고 하면 DataColumn이 떠올라야합니다.

이 컬럼은 중요하지요.

왜냐? 테이블이 어떻게 구성되었는지에 대해서 나타내기 때문입니다.


DataColumn은 실제 데이터가 아닌 것을 아셔야합니다.

해당 객체가 만들어지면 테이블의 집합을 컬렉션으로 갖습니다.

추가적으로 테이블에는 Relation, Property 집합 역시 컬렉션으로 갖지요.


이 이유는, 메모리 상에 표현해야하기 때문입니다.


DataTable 의 핵심은

DataColumn들의 컬렉션을 갖는 다는 것과, DataRow들을 컬렉션으로 갖는다는 것입니다.


이번 시간은 여기까지 하도록하겠습니다.


이상 삽잡이였습니다!