sub_title
 ASP.NET
제   목 닷넷에서 DataSet 다루기
작성자 아침마당 등록일 2010-06-21 16:33:35 조회수 24,586

- DataSet 다루기

DataSet은 ADO.NET의 구조 중 중요한 부분으로 데이터베이스로부터 가져온 데이터를 캐쉬 메모리에 저장하여 사용한다. 즉, 메모리에 있는 데이터베이스라고 할 수 있겠다.

DataSet은 데이터베이스에 있는 내용 및 구조를 그대로 옮겨오는 것이기 때문에 데이터베이스에 대한 연결은 일반 연결과정과 같다. 이 연결을 통해서 데이터베이스의 내용을 가상 데이터베이스인 DataSet에 넣는다.

데이터베이스와 DataSet의 상호작용은 SqlDataAdapter나 OleDbDataAdapter 등을 통해 제어된다.

DataSet의 속성

속 성

설 명

CaseSensitive

대소문자를 구분할 것인지 아닌지를 지정, true이면 대소문자를 구분한다.

DataSetName

이 데이터셋의 이름을 얻거나 지정할 수 있다.

Relations

부모 테이블에서 자식 테이블로의 탐색을 허가하고 테이블 연결의 관계에 대한 커넥션을 얻는다.

Tables

데이터셋에 포함된 테이블의 컬렉션을 얻는다.

 

데이터셋의 메소드

메소드

설 명

AcceptChanges

데이터셋이 로드되거나 가장 마지막의 AcceptChanges가 요청된 이후 데이터셋의 모든 변경 사항을 적용한다.

Clear

모든 테이블에 있는 행을 지운다. 다시 말하면, 데이터셋의 데이터를 모두 없앤다.

Clone

모든 테이블 구조와 관계 제약 등을 포함한 데이터셋의 구조만을 복사한다. 복사한 데이터셋이 리턴된다.

Copy

데이터셋에 대한 구조와 데이터를 복사한다. 복사한 데이터셋이 리턴된다.

GetChanges

AcceptChanges가 마지막으로 호출되거나 DataSet이 로드된 이래 만들어진 모든 변경을 포함한 데이터셋의 복사를 리턴한다.

GetXml

데이터셋에 포함된 데이터의 XML 표현을 문자열로 반환한다.

GetXmlSchema

데이터셋에 저장된 데이터의 XML 표현에 대한 XSD 스키마를 문자열로 반환한다.

HasChanges

데이터셋의 변경 즉, 새로운 행의 추가, 삭제, 수정에 대한 것들이 있는지 없는지의 여부를 나타내는 값을 가져온다.

ReadXml

데이터셋으로 XML 데이터의 구조를 읽는다. 실제 읽어 들인 데이터는 데이터셋에 저장되어진다.

ReadXmlSchema

데이터셋으로 XML 구조(Schema)를 읽어 들인다.

RejectChanges

최종적으로 DasaSet.AcceptChanges가 호출되거나 만들어진 이후의 데이터셋으로부터 만들어진 모든 변경을 RollBack한다.

WriteXml

데이터셋이 포함하고 있는 데이터나 스키마 등을 쓴다.

WriteXmlSchema

데이터셋의 스키마를 쓴다.

<?xml:namespace prefix = o />

- DataSet 만들기

DataSet을 만드는 방법은 생성자를 호출하여 만들거나 기존 DataSet을 기반으로 하여 일부 스키마를 복사하여 만들 수 있다. DataSet을 만들 때 DataSet의 이름을 지정하지 않을 경우 자동으로 “NewDataSet”이라는 이름으로 지정된다.

다음은 DataSet을 만드는 예이다.

DataSet ds = new DataSet(“데이터셋이름”);

 

- DataSet의 DataTable

DataSet은 테이블의 집합이라고 할 수 있다. 테이블 간의 관계 등 다른 정보들도 물론 포함되어 있지만 가장 근본이 되는 것은 그 속에 포함되어 있는 테이블들이라고 말할 수 있다.

DataSet에 포함되어 있는 테이블들은 DataSet의 속성인 Tables를 통해 얻을 수 있는데 Tables 속성은 DataTable 개체의 집합인 DataTableCollection으로 이루어져 있다.

 

DataSet에 DataTable을 추가하기 위해서는 DataTableCollection의 Add 메소드를 이용하여 작업할 수 있다. 또한 DataSet에서 DataTable를 삭제하고자 한다면, Remove 메소드를 이용하면 된다.

DataSet에 테이블 추가

DataSet.Tables.Add(DataTable);

 

DataSet에서 테이블 삭제

DataSet.Tables.Remove(DataTable);

 

DataTable의 속성

속성

설 명

CaseSensitive

테이블 내에 있는 데이터들의 문자열 비교시 대소문자를 구분할지의 여부를 지정한다.

ChildRelations

테이블과 자식 관계에 있는 DataRelation에 대한 컬렉션을 가져온다.

Columns

테이블에 속한 DataColumn들에 대한 컬렉션을 가져온다.

Constraints

테이블에 대한 Constraint들에 대한 컬렉션을 가져온다. Constraint는 테이블에 대한 제약 조건이다.

DataSet

테이블이 속해 있는 DataSet을 리턴한다.

DefaultView

테이블을 정렬하거나 필터링 할 수 있는 DataView를 리턴한다.

HasErrors

테이블이 속하는 DataSet의 테이블에 오류가 있는지의 여부를 나타낸다.

ParentRelations

테이블과 부모관계에 있는 DataRelation에 대한 컬렉션을 가져온다.

PrimaryKey

데이터 테이블에 대한 기본 키로 사용되는 열의 배열을 가져오거나 설정한다. 이때 리턴되는 값은 DataColumn 개체의 배열로 이루어진다.

Rows

테이블에 속한 DataRow들에 대한 컬렉션을 가져온다.

TableName

DataTable의 이름을 가져오거나 설정한다.

 

DataTable의 메소드

메소드

설 명

AcceptChanges

AcceptChanges가 마지막으로 호출된 이후 테이블에서 변경된 내용을 모두 적용한다.

Clear

테이블에 들어 있는 모든 데이터를 지운다.

Clone

테이블의 구조를 복사하여 지운다.

Compute

인자로 사용된 필터와 계산식을 통해 제한된 행에 대한 계산식을 수행한다.

Copy

테이블의 구조와 데이터를 복사하여 리턴한다.

GetChanges

테이블이 로드되거나 마지막으로 사용된 AcceptChanges 후에 변경된 DataTable의 복사본을 리턴한다.

GetErrors

테이블에 오류가 있을 경우 오류를 가지고 있는 열들을 DataRow의 배열로 리턴한다.

ImportRow

모든 값 및 속성을 유지한 채 DataRow을 DataTable에 복사한다.

NewRow

테이블과 같은 스키마를 갖는 DataRow를 만든다.

RejectChanges

테이블이 로드되거나 마지막으로 사용된 AcceptChanges 후에 변경된 내용을 모두 RollBack하여 원상태로 돌린다.

Reset

테이블을 원래 상태로 다시 설정한다.

Select

필터링 조건이나 열 상태 등과 일치하는 모든 열을 DataRow의 배열로 리턴한다.

 

- DataTable에 열 추가하기

DataTable을 처음 만들 때에는 스키마가 존재하지 않는다. DataTable에 대한 스키마는 DataColumn을 먼저 생성한 후 DataTable의 Columns 속성의 Add 메소드를? 이용하여 DataColumn을 추가한다.

DataColumn의 속성

속성

설 명

AllowDBNull

null 값의 허용 여부를 가져오거나 설정한다.

AutoIncrement

테이블에 더해지는 새로운 열의 칼럼을 자동으로 오름차순으로 정렬할 것인가를 가져오거나 지정한다.

AutoIncrementSeed

AutoIncrement 속성이 true로 설정된 열의 시작 값을 가져오거나 설정한다.

AutoIncrementStep

AutoIncrement 속성이 true로 설정된 열에 사용되는 증분을 가져오거나 설정한다.

Caption

Caption 값을 표시할 수 있는 컨트롤에 표시할 내용을 설정하는 것으로 DataColumn에서 설정하지 않을 경우 칼럼 이름이 사용된다.

ColumnName

컬럼 이름을 가져오거나 지정한다.

DataType

열에 지정된 데이터의 형식을 가져오거나 지정한다.

DefaultValue

새로운 열을 생성했을 때 칼럼의 Default 값을 가져오거나 지정한다.

Expression

칼럼의 필터나 값을 계산하거나 칼럼의 집합을 만드는 표현을 가져오거나 지정한다.

MaxLength

텍스트 열의 최대 길이를 가져오거나 지정한다. 최대 길이가 없을 경우 -1이 사용되며, 텍스트 속성이 아닌 열에서는 무시된다.

Ordinal

ColumnCollection 컬렉션에서 컬럼의 위치를 가져온다. 만약 컬렉션의 멤버가 아니면 -1이 리턴된다.

ReadOnly

열을 변경할 수 있는지의 여부를 나타내는 값을 가져오거나 설정한다.

Table

칼럼이 포함된 데이터 테이블을 가져온다.

Unique

열의 각 행에 있는 값이 고유값이어야 하는 지의 여부를 가져오거나 지정한다.

 

DataTable dt = new DataTable(“TestTable”);

DataColumn dc1 = new DataColumn(“field1”, typeof(int));

DataColumn dc2 = new DataColumn(“field2”, typeof(string));

 

dt.Columns.Add(dc1);

dt.Columns.Add(dc2);

 

- DataTable에 행 추가하기

DataTable에 데이터를 넣기 위해 사용되는 것이 DataRow이다. DataRow는 DataTable의 Rows 속성으로 얻을 수 있는 DataRowCollection에 추가함으로써 테이블에 추가할 수 있다.

 

DataRow의 속성

속성

설 명

HasErrors

행에 오류가 있는지의 여부를 나타낸다.

Item

인덱스나 데이터 칼럼, 칼럼 이름 등을 사용하여 해당 필드의 값을 가져오거나 설정한다.

ItemArray

행에 포함되어 있는 모든 필드의 값을 object[] 형태로 가져온다.

Table

행이 포함되어 있는 DataTable을 가져온다.

 

DataRow의 메소드

메소드

설 명

AcceptChanges

AcceptChanges가 마지막으로 호출된 이후 이 행에서 변경된 내용 모두를 적용시킨다.

Delete

DataRow를 삭제한다.

IsNull

인덱스나 데이터 칼럼, 혹은 칼럼 이름을 사용하여 DataRow의 해당 필드에 널 값이 존재하는지의 여부를 나타낸다.

RejectChanges

AcceptChanges를 마지막으로 호출한 이후 변경된 내용을 모두 최소한다.

SetNull

지정된 DataColumn의 값을 null로 설정한다.

 

DataRow dr = dt.NewRow();

dr[“field”] = 1;

dr[“field”] = “홍길동”

dt.Rows.Add(dr);

 

- DataTable의 행과 열 출력

DataTable에 포함되어 있는 행(DataColumn)에 대한 정보를 알기 위해서 우선 DataTable의 DataColumns 속성을 이용하여 모든 행들을 가져온다. DataTable에 DataColumn들은 DataColumnCollection 형태로 포함되어 있기 때문에 각각의 DataColumn 값을 인덱스를 이용하여 정보를 가져올 수 있다.

DataTable dt;

foreach(DataColumn dc in dt.Columns)

{

Response.Write(dc.ColumnName + “:” + dc.DataType.ToString());

}

 

foreach를 이용하지 않고 for 구문을 이용해서 출력을 할 경우에는 DataColumnCollection의 Count를 이용하여 총 개수를 구한 다음 루프 안의 인덱스를 통해 각각의 DataColumn에 엑세스할 수 있다.

다음은 for 구문을 이용한 DataRow들을 출력하는 예이다.

for(int i=0;i<dt.Rows.Count;i++)

{

Response.Write(dt.Rows[i][“field”].ToString() + “:” + dt.Rows[i][“field2”].ToString());

}

}

 

- 데이터베이스와 DataSet

DataSet은 데이터베이스에 있는 내용 및 구조를 그대로 옮겨오는 것이기 때문에 데이터베이스에 대한 연결은 일반 연결 과정과 같다. 이 연결을 통해서 데이터베이스의 내용을 가상 데이터베이스인 DataSet에 넣게 된다.

데이터베이스와 DataSet의 상호 작용은 SqlDataAdapter나 OleDbDataAdapter 등을 통해 제어되는데, 먼저 SqlDataAdapter에 대한 속성과 메소드이다.

SqlDataAdapter의 속성

속성

설 명

DeleteCommand

데이터셋의 삭제된 행과 일치하는 데이터베이스의 행을 삭제할 SqlCommand로, Update가 호출되면 실행된다.

InsertCommand

데이터셋에 새로운 행이 추가되었을 때 데이터베이스에 새로운 행을 추가하기 위한 SqlCommand로 Update가 호출되면 실행된다.

SelectCommand

데이터베이스의 내용을 DataSet에 채우기 위한 SqlCommand로 Fill메소드가 호출되면 실행된다.

UpdateCommand

데이터셋에 수정된 행이 있을 때 데이터베이스의 행을 수정하기 위한 SqlCommand로 Update가 호출되면 실행된다.

 

SqlDataAdapter의 메소드

메소드

설 명

Fill

데이터 소스의 행과 일치하도록 데이터셋을 채우거나 수정한다. 데이터와 스키마 모두 적용된다.

FillSchema

데이터 소스의 스키마와 일치하도록 데이터셋을 채운다.

Update

데이터셋의 삽입, 수정, 삭제 등과 같은 내용이 발생한 행마다 각각의 INSERT, UPDATE, DELETE 구문을 호출하여 데이터베이스에 적용시킨다.

 

- DataSet 채우기

DataSet에 데이터베이스의 내용을 채우기 위해서는 가장 쉬운 방법은 SqlDataAdapter를 이용하는 것인데, SqlDataAdapter를 이용해 채우기 위해서는 채우려고 하는 Select 쿼리문과 연결하기 위한 SqlConnection이 필요하다.

SqlConnection을 통해 연결한 후 Fill 메소드를 호출함으로써 DataSet에 데이터베이스의 내용을 채울 수 있다.

public DataSet FillDataSet()

{

string sql = “select * from 테이블이름”;

SqlDataAdapter adapter = new SqlDataAdapter(sql, CreateConnection());

DataSet ds = new DataSet();

adapter.Fill(ds, “테이블이름”);

return ds

}

 

- DataSet의 데이터 엑세스하기

데이터셋에 있는 가상 테이블을 액세스하는 방법은 다음과 같다.

DataSet.Tables[index]

또는

DataSet.Tables[tablename]

데이터셋 클래스에는 Tables라는 속성이 있는데 이것은 데이터셋에 있는 테이블들의 컬렉션을 리턴해 준다. 이러한 테이블의 속성을 이용하여 접근하고자 하는 테이블에 액세스할 수 있다.

 

테이블에 대한 접근이 이루어졌으니 테이블 속에 들어 있는 열과 행들에 대한 엑세스는 단일 테이블에 엑세스하는 방법과 같다.

foreach(DataRow dRow in ds.Tables[“데이터셋의 테이블이름”].Rows)

{

Response.Write(dRow[“필드이름”].ToString());

}

 

 
0
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
29  ASP.NET에서 Gridview 내용을 Excel로 export하기   member 아침마당 2 / 0 9980 2010-11-01
28  ASP.NET에서 메일 보내기   member 아침마당 0 / 0 5638 2010-10-26
27  문자열 변수 = 문자열 변수 + 정수형 변수   member 아침마당 0 / 0 3318 2010-10-21
26  출력 매개변수를 갖는 저장 프로시저 ASP.NET에서 사용하기   member 아침마당 0 / 0 8156 2010-10-04
25  ASP.NET에서 저장 프로시저 사용하기   member 아침마당 2 / 0 9815 2010-09-30
24  저장 프로시저 만들기   member 아침마당 1 / 0 4789 2010-09-28
23  Visual Studio 2010 단축키 요약 파일 첨부파일   member 아침마당 0 / 0 5085 2010-09-07
22  ASP.NET에서 예외 처리에 대해서   member 아침마당 0 / 0 4587 2010-08-29
21  답변형 게시판 예제 파일   member 아침마당 1 / 0 3262 2010-08-22
20  리스트 컨트롤과 컬렉션에 대해서   member 아침마당 1 / 0 6124 2010-08-17
19  데이터 바인딩과 배열에 대해서   member 아침마당 0 / 0 3935 2010-08-16
18  Gridview control에 TemplateField를 사용하는 이유   member 아침마당 1 / 1 4369 2010-08-12
17  C#의 제어문   member 아침마당 0 / 0 5013 2010-08-04
16  Windows SharePoint Services 3.0 도구에 대하여   member 아침마당 0 / 0 3331 2010-07-17
15  C#의 기본 규칙   member 아침마당 0 / 0 3687 2010-07-09
14  닷넷에서 DataSet 다루기   member 아침마당 0 / 0 24586 2010-06-21
13  ASP.NET에서 TextBox에 onfocus, onblur 이벤트 적용 예   member 아침마당 0 / 0 5417 2010-06-15
12  ASP.NET에서 TextBox 엔터키 적용과 주민 번호 검증 예   member 아침마당 0 / 0 5537 2010-06-15
11  ASP.NET 정수<-->문자열 형변환, 메시지출력, switch문 사용 예   member 아침마당 0 / 0 8070 2010-06-15
10  닷넷에서 XML 다루기 이미지 첨부파일   member 아침마당 1 / 0 5662 2010-06-07
9  데이터 그리드 안에 있는 컨트롤 이벤트 만들기   member 깐소금 0 / 0 5409 2007-11-18
8  로딩페이지 구현하기   member 깐소금 0 / 0 7012 2007-11-18
7  CDO객체를 이용하여 야후 smtp로 메일 보내기   member 먹깨비 0 / 0 4977 2007-11-15
6  C# 버블소트 알고리즘   member 웹스톤 0 / 0 4469 2007-11-14
5  @OutputCache 디렉티브를 사용한 페이지 성능 향상   member 먹깨비 0 / 0 6515 2007-09-17
write
[2] button