1.Table Mapping

ADO.NET에서는 DataTableMapping 과 DataColumnMapping 객체를 사용해서 데이터베이스에서 가져온 데이터의 컬럼명과 그것을 담아둘 DataSet의 컬럼명을 서로 매핑하는 방법을 사용할 수 있다.

이는 나중에 다시 한번 다루게 되겠지만 불분명한 컬럼명이나 짧은 컬럼명을 갖는 테이블을 관리할 때 유용하게 사용할 수 있는데 Table Mapping을 여러분이 직접 코드 상에서 관리할 수도 있지만 DataAdapter에서 TableMapping 속성을 통해서 편리하게 매핑작업을 수행 할 수 있도록 지원해주고 있다.

왼쪽 화면과 같이 테이블 매핑창을 사용해서 원본 데이터와 데이터 셋의 컬럼명을 설정할 수 있게 되어 있다.

이때 DataSet도 역시 기존에 생성되어 있는 것이 있으면 그걸 선택해서 매핑할 수 있게 되어 있는데 그렇게 하기위해서는 위에 있는 테이블 및 열 이름을 지정할 때 데이터 집합을 사용합니다. 체크 박스에 체크를 하시면 DataSet을 선택할 수 있다.

테이블 매핑은 웹 서비스등에서 적극적으로 활용할 수 있으며 이 작업을 마치고 나서 소스를 확인해 보면 관련 코드가 자동으로 생성되어 있는 것을 볼 수 있다.

2.DataSet

다시 DataSet이 나왔다. 사실 ADO.NET은 DataSet만 잘 사용해도 굉장히 작업이 용이하고 편리하다. 그만큼 대부분의 작업에서 DataSet을 사용하고 있으며 활용도가 높은 객체이다.

DataSet 객체를 생성하는 방법도 역시 이전과 크게 다르지 않다.

여기서 중요한 개념을 가지고 가야 하는데 DataSet은 두 가지 형태로 사용할 수 있다는 점이다.

-   Typed DataSet

스키마 정보를 클래스 정의에 포함시키는 DataSet 클래스의 기존 서브클래스에 기초한 개체를 생성한다. 말이 너무 어렵지 않은가? 다시 쉽게 데이터베이스의 테이블 정보를 가지고 있는 DataSet. 이게 좀더 쉽겠다.

-   UnTyped DataSet

일반적으로 그냥 DataSet을 사용하면 형식화되지 않은 DataSet이 나온다.

Typed DataSet 에 비해서 약간의 속도저하가 있으나 유연하기 때문에 많이 사용하는 방식이다.

일반적으로 Typed DataSet을 사용하는 이유는 이미 DataSet내부에 스키마 정보를 이미 가지고 있기 때문에 데이터베이스상에서 쿼리를 최적화 하는 과정에 많은 속도상의 잇점을 얻게 된다.

또 하나 데이터베이스의 스키마 정보가 모두 객체화 되어 있기 때문에 코딩과정에서 오류를 일으킬 확률이 현저하게 떨어진다.

또 설사 오류를 일으킨다 해도 디버깅 작업이 아주 간편하기 때문에 Typed DataSet을 선호하는 개발자들이 상당수 있다.

DataSet을 폼에 추가하면 아래와 같이 두 가지 선택을 할 수 있게 나온다.

첫 번째가 Typed DataSet이고 두 번째가 Untyped DataSet이다.

Untyped DataSet의 경우는 별다른 설정을 해줄 필요가 없기 때문에 바로 새로운 DataSet 추가 되고 작업이 종료된다.

형식화된 DataSet을 사용하기 위해서는 먼저 데이터베이스 또는 기타 형태의 테이블 스키마 정보가 미리 제공되어 있어야 한다.

대부분의 경우는 아래와 같이 솔루션 창에서 추가 -> 새 항목 추가를 선택한 다음에

데이터 집합을 선택해서 추가하는 방법을 사용한다.

이렇게 새로운 데이터 집합을 추가하고 나면 XXX.xsd 파일이 생성되게 되는데 이 파일을 열어보면 이 파일 역시 하나의 XML파일이라는 걸 알 수 있다.

눈을 씻고 봐도 스키마 정보가 보이지 않는다.

여기에 우리는 스키마 정보를 입력해 두어야 이를 바탕으로 Typed DataSet이 동작하게 된다. 데이터베이스 스키마 정보를 입력하는 방법 역시 마우스질(?)만으로 해결 된다.

좌측 그림과 같이 서버 탐색기에서 우리가 사용하자 하는 테이블을 잡아서 XSD파일 위로 끌어다 놓기만 하면 여기에 관련된 스키마가 자동으로 설정되는 것을 볼 수 있다.

이제 XSD파일을 확장해 보면 아래와 같이 XXX.cs 파일이 추가되어 있는 것을 볼 수 있다.

이 클래스 파일을 열어보면 DataSet에서 상속받은 새로운 클래스가 소스차원에서 정의되어 있는 것을 발견할 수 있는데  이 클래스가 바로 Typed DataSet이다. 다시 말해서 Typed DataSet의 부모는 Untyped DataSet이고 여기에 스키마정보를 XML로 정의해서 이를 객체화 시킨 것이 바로 Typed DataSet라고 할 수 있다.

DataSet안에는 하나 이상의 테이블을 추가할 수 있으며 추가된 테이블들이 서로 관계를 설정할 수 있다.

이렇게 관계를 설정하는데 있어서 아래에 보면 몇 가지 조건이 존재하는 것이 보이는데 업데이트 규칙, 삭제 규칙, 적용/취소 규칙 등이 있다.

규칙은 모두 네 가지 중 하나를 적용할 수 있으며 아래와 같다.

-   (기본값): 기본값으로 설정된 값으로 설정된다.

-   None: 관련된 행에 어떤 동작도 일어나지 않는다.

-   Casecade: 관련된 모든 행에 단계적으로 업데이트/삭제를 한다.

-   SetNull: 관련된 모든 행이 업데이트 동작의 결과로 DBNull로 설정된다.

-   SetDefault: 업데이트에 영향을 받은 모든 행은 DefaultValue에 의해서 설정된 값을 가지게 된다.

Typed DataSet을 사용하는 방법은 Untyped DataSet과 동일한 부분도 있고 더 편리한 부분도 있다. 동일한 부분은 DataAdapter를 이용해서 DataSet을 채우는 부분이고 더 편리한 부분은 데이터에 접근하는 방법이다.

3.DataView

마지막으로 살펴볼 객체는 바로 DataView이다.

DataView 객체는 데이터를 필터링 하고 정렬할 수 있는 기능을 제공해 준다. 특히 하나의 데이터목록에서 여러 개의 조건에 따라 각각 다른 목록을 출력한다든지 할 때 아주 유용하게 사용할 수 있다.

먼저 DataView의 멤버를 살펴보기로 한다.

public 속성AllowDelete

.NET Compact Framework에서 지원

삭제가 허용되는지 여부를 나타내는 값을 설정하거나 가져옵니다.

public 속성AllowEdit

.NET Compact Framework에서 지원

편집이 허용되는지 여부를 나타내는 값을 가져오거나 설정합니다.

public 속성AllowNew

.NET Compact Framework에서 지원

AddNew 메서드를 사용하여 새 행을 추가할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다.

public 속성ApplyDefaultSort

.NET Compact Framework에서 지원

기본 정렬을 사용할지 여부를 나타내는 값을 가져오거나 설정합니다.

public 속성Container(MarshalByValueComponent에서 상속)

구성 요소의 컨테이너를 가져옵니다.

public 속성Count

.NET Compact Framework에서 지원

RowFilterRowStateFilter를 적용한 다음 DataView의 레코드 수를 가져옵니다.

public 속성DataViewManager

.NET Compact Framework에서 지원

이 뷰와 관련된DataViewManager를 가져옵니다.

public 속성DesignMode(MarshalByValueComponent에서 상속)

구성 요소가 현재 디자인 모드에 있는지 여부를 나타내는 값을 가져옵니다.

public 속성Item

지정된 테이블에서 데이터 행을 가져옵니다.

C#에서 이 속성은 DataView 클래스에 대한 인덱서입니다.

public 속성RowFilter

.NET Compact Framework에서 지원

DataView에 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정합니다.

public 속성RowStateFilter

.NET Compact Framework에서 지원

DataView에 사용되는 행 상태 필터를 가져오거나 설정합니다.

public 속성Site(MarshalByValueComponent에서 상속)

구성 요소의 사이트를 가져오거나 설정합니다.

public 속성Sort

.NET Compact Framework에서 지원

DataView에 대한 정렬 열과 정렬 순서를 가져오거나 설정합니다.

public 속성Table

.NET Compact Framework에서 지원

소스 DataTable을 가져오거나 설정합니다.

Public 메서드

public 메서드AddNew

.NET Compact Framework에서 지원

새 행을 DataView에 추가합니다.

public 메서드BeginInit

.NET Compact Framework에서 지원

폼에 사용되거나 다른 구성 요소에서 사용하는 DataView의 초기화를 시작합니다. 초기화는 런타임에 발생합니다.

public 메서드CopyTo

.NET Compact Framework에서 지원

항목을 배열로 복사합니다. Web Form 인터페이스 전용입니다.

public 메서드Delete

.NET Compact Framework에서 지원

지정된 인덱스의 행을 삭제합니다.

public 메서드Dispose(MarshalByValueComponent에서 상속)

.NET Compact Framework에서 지원

오버로드되었습니다.MarshalByValueComponent에서 사용하는 리소스를 해제합니다.

public 메서드EndInit

.NET Compact Framework에서 지원

폼에 사용되거나 다른 구성 요소에서 사용하는 DataView의 초기화를 끝냅니다.초기화는 런타임에 발생합니다.

public 메서드Equals(Object에서 상속)

.NET Compact Framework에서 지원

오버로드되었습니다. 두 개의 Object 인스턴스가 같은지 여부를 확인합니다.

public 메서드Find

.NET Compact Framework에서 지원

오버로드되었습니다. 지정된 정렬 키 값에 따라 DataView에서 행을 찾습니다.

public 메서드FindRows

.NET Compact Framework에서 지원

오버로드되었습니다. 열 값이 지정된 정렬 키 값과 일치하는 DataRowView 개체의 배열을 반환합니다.

public 메서드GetEnumerator

.NET Compact Framework에서 지원

DataView에 대한 열거자를 가져옵니다.

public 메서드GetHashCode(Object에서 상속)

.NET Compact Framework에서 지원

특정 형식에 대한 해시 함수로 사용되며 해시 알고리즘 및 해시 테이블과 같은 데이터 구조에 사용하기 적당합니다.

public 메서드GetService(MarshalByValueComponent에서 상속)

IServiceProvider의 구현자를 가져옵니다.

public 메서드GetType(Object에서 상속)

.NET Compact Framework에서 지원

현재 인스턴스의 Type을 가져옵니다.

public 메서드ToString(Object에서 상속)

.NET Compact Framework에서 지원

이중에서 중요한 몇 가지 속성만 살펴보고 가도록 하겠다.

RowStateFilter 속성

RowStateFilter 속성

멤버 이름

설명

Added
.NET Compact Framework에서 지원

새 행입니다.

4

CurrentRows
.NET Compact Framework에서 지원

변경되지 않은 행, 새 행 및 수정된 행을 포함한 현재 행입니다.

22

Deleted
.NET Compact Framework에서 지원

삭제된 행입니다.

8

ModifiedCurrent
.NET Compact Framework에서 지원

현재 버전으로서 원본 데이터의 수정된 버전입니다(ModifiedOriginal 참조).

16

ModifiedOriginal
.NET Compact Framework에서 지원

원래 버전이며 수정되어 ModifiedCurrent로 사용할 수 있는 경우를 포함합니다.

32

None
.NET Compact Framework에서 지원

없음

0

OriginalRows
.NET Compact Framework에서 지원

변경되지 않은 행과 삭제된 행을 포함한 원본 행입니다.

42

Unchanged
.NET Compact Framework에서 지원

변경되지 않은 행입니다.

2

RowStateFilter 속성은 현재 행 상태를 바탕으로 데이터를 걸러낼 수 있도록 하는 속성이다. DataView의 기본 설정은 CurrentRows로 설정되어 있겠지만 필요에 따라서 삭제된 행이나 수정된 행, 추가된 행 등을 필터링 할 수 있으며 또 변경전의 데이터 원본을 출력할 수도 있다.

RowFilter 속성

DataView에 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정한다.

RowFilter 값을 만들려면 열 이름과 연산자, 필터링 대상 값을 차례로 지정합니다. 이 값은 따옴표로 묶어야 합니다. 예를 들면 다음과 같다.

"LastName = 'Smith'"

자세한 내용은 DataColumn 클래스의 Expression 속성을 참조한다.

null 값이 있는 열만 반환하려면 다음 식을 사용합니다.

"Isnull(Col1,'Null Column') = 'Null Column'"

Sort 속성

DataView에 대한 정렬 열과 정렬 순서를 가져오거나 설정한다.

열 이름과 "ASC"(오름차순) 또는 "DESC"(내림차순)로 구성된 문자열이다. 열은 기본적으로 오름차순으로 정렬된다.. 여러 개의 열은 쉼표로 구분할 수 있다.

// Get the DefaultViewManager of a DataTable.

   DataView myDataView = DataTable1.DefaultView;

   // By default, the first column sorted ascending.

   myDataView.Sort = "State, ZipCode DESC";

여기 3장에서는 Visual Studio를 통한 ADO.NET 프로그램의 작성법에 대해서 살펴보았다.

다음 장에서는 DataReader와 DataSet등을 하나씩 살펴보도록 하겠다.

정리

여기서는 ADO.NET의 특이한 객체 3가지인 Data Mapping, Untyped Dataset 그리고 DataView에 대해서 살펴보았다. 실제 예제는 역기서 다뤄지지 않았는데 차후에 하나씩 심도있게 다시 정리할 예정이다.

 

나비 태그:
Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total :
Today : Yesterday :