삽질의 현장/- .NET

#093_닷넷(.NET)_ ADO.NET - 비연결 계층 코드

shovelman 2015. 11. 20. 08:17


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


지난 시간에는 ADO.NET에서 제공하는 비연결 계층에 대해서 알아봤습니다.

개념을 중점적으로 알아봤었지요.


이제부터는 실제 코드를 보며, 

어떻게 비연결 계층을 다루는지에 대해서 알아보겠습니다.


데이터 컬럼을 만드는 방법은 이와 같습니다.



Primary Key는 오직 읽기만 가능하고, 

누구나 가지고 있으며, Uniqe해야합니다.

따라서, 이와 같이 상태에 대한 설정을 해주고 

Primary Key로 Column을 지정해줄 수 있습니다.



또한, Column들을 따로 따로 만들 필요 없이

AddRange()를 통해 여러개의 Column들을 한꺼번에 만들 수 있습니다.


물론, DB에서 자동적으로 만들어주지만,

공부를 위해 수동적으로 만드는 방법에 대해서 알아보는 것입니다.



DataRow는 각각의 상태로써 기본값을 제공해주지 않습니다.

또한, DataRow는 스키마가 아니지요. 

Row는 값입니다. Column 없이 만들어질 수 없지요.

따라서, 테이블에는 NewRow() 메서드를 통해서 값을 추가할 수 있습니다.


그런데, 이 DataRow들은 속성을 가지고 있습니다.


RowState의 상태에는 

'Add, Deleted, Detatched, Modified,, Unchanged'와 같은 상태가 있습니다.

수 많은 데이터들 중 변경되어있는 것들에 대해서만 

Update를 할 수 있도록 제공해주는 기능입니다.


이는 APP에 있는 DB와 DB원본과의 Sync를 이루기 위해 제공해주는 기능이지요.



데이터 어뎁터를 사용해서 

어떻게 비 연결형 데이터를 읽고 쓸 수 있는지에 대한 기능을 사용할 수 있습니다.


 


데이터 셋, 어뎁터 객체를 만들고,

커넥션을 유도하며, Select 명령문을 이용해서 읽어오기 가능한 객체를 생성하는 것입니다.


비연결형은 DB와 그 사이에 당연히 Connection 객체가 필요합니다.

그런데, 따로 만들지 않고 이처럼 같이 만들 수 있게 되는 것이지요.


이와 같이 Select SQL 명령문을 사용한다면,

Adapter에 있는 Select Command 객체가 내무적으로 만들어지게 됩니다.


그리고, Fill() 메서드를 사용하여

원본 DB로 부터 데이터를 뽑아오는 것입니다.

즉, DataTable 형식의 '테이블 이름'을 가진 메모리상에 테이블을 만들어서

Selection 명령을 통해 채운다는 것입니다.


말을 좀 헷갈리게 썼군요... 허허...


아무튼, DB의 '테이블 이름'의 내용을 ds로 만들어내라 이겁니다.


그런데, 위의 코드는 Select 명령만을 설정해놨기 때문에,

Insert, Delete, Upate에 대한 기능을 제공해주지 않습니다.



이전 같으면 일일히 모두 다 설정을 해줘야겠지만...



그럴 필요없이, 

어차피 하는일은 똑같고... 형식도 다 똑같은데 명령문만 달라지니,

아주 쉽고 편하게 '바인딩'이라는 기능을 제공해줌으로써 

이런 명령들을 모두 자동으로 만들어줄 수 있습니다.


SqlCommandBuilder 객체를 생성함과 동시에 

생성자 인수로 Adapter 객체를 넘기게 되면 나머지 Command들을 

생성자에서 자동으로 만들어주게 됩니다.


원본 DB에 있는 테이블, 컬럼, 열등을 모두 가져오는데

관계 역시 가져와야되지 않겠습니까?


DataAdapter가 관계까지 만들어주지는 않습니다.

테이블을 대상으로 데이터를 읽고, 쓰기 때문이지요.

따라서, 사용자가 직접 관계를 만들어줘야한다 이것이지요.



데이터 셋을 만들고, 해당하는 테이블들을 만들고 내용물 까지 얻어왔다면?

이제 관계를 지어줘야겠지요.


 


관계를 지어주기 위해서는 DataRelateion 객체가 필요합니다.


 


이와 같은 관계설정을 통해서, 각 테이블을 참조할 수 있게 되지요.



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


이상 삽잡이였습니다!



<참고 : C# and the .NET4 Platform>