C#DataSet과 DataTable의 차이점과 사용법
DataSet은 데이터 세트이고 DataTable은 데이터 테이블이며 DataSet은 여러 DataTable을 저장합니다. DataSet 및 DataTable은 데이터 저장 전용 컨테이너와 같으며, 결과를 얻기 위해 데이터베이스를 쿼리할 때 저장될 수 있습니다.
DataSet에는 탐색, 정렬, 검색, 필터링, 계층적 데이터 처리, 변경 사항 캐싱 등과 같은 강력한 기능이 있습니다. 또한 XML 데이터와 상호 교환될 수도 있습니다. DataSet은 여러 DataTable을 포함할 수 있으며 작업을 용이하게 하기 위해 여러 쿼리 구조를 DataSet에 저장할 수 있습니다. ADO.NET 개발자가 데이터 처리를 용이하게 하기 위해 개발한 DataReader의 단점을 해결하기 위해 설계되었습니다. 데이터 처리 속도는 빠르지만 읽기 전용이므로 다음 행으로 이동하면 이전 행의 데이터를 볼 수 없습니다. DataSet의 데이터가 데이터베이스에서 연결이 끊어졌습니다. DataSet은 다중 계층 애플리케이션에서도 사용할 수 있습니다. 애플리케이션이 중간 계층의 비즈니스 개체에서 실행되어 데이터베이스에 액세스하는 경우 비즈니스 개체는 오프라인 데이터 구조를 클라이언트 애플리케이션에 전달해야 합니다.
DataSet을 생성하는 세 가지 방법:
DataTable()은 매개변수 없이 DataTable 클래스의 새 인스턴스를 초기화합니다.
DataTable(string tableName) 지정된 테이블 이름을 사용하여 DataTable 클래스의 새 인스턴스를 초기화합니다.
DataSet의 공통 속성 소개:
CaseSensitive는 테이블의 문자열 비교에서 대소문자를 구분하는지 여부를 나타냅니다. 대소문자를 구분하는 경우 기본값은 false입니다.
ChildRelations 이 DataTable의 하위 관계 컬렉션을 가져옵니다.
Columns 이 테이블에 속하는 열 컬렉션을 가져옵니다.
제약조건 이 테이블에서 유지 관리하는 제약 조건 컬렉션을 가져옵니다.
DataSet 이 테이블이 속한 DataSet을 가져옵니다. DataSet에 대한 자세한 내용은 이전 기사 "데이터 액세스(2) - DataSet"을 참조하세요.
DefaultView는 필터 보기나 커서 위치를 포함할 수 있는 테이블의 사용자 정의 보기를 얻습니다.
HasErrors 이 테이블이 속한 DataSet에 있는 모든 테이블의 행에 오류가 있는지 여부를 나타내는 값을 가져옵니다.
MinimumCapacity 테이블의 초기 시작 크기를 가져오거나 설정합니다. 이 테이블에 있는 행의 초기 시작 크기입니다. 기본값은 50입니다.
Rows 이 테이블에 속하는 행 컬렉션을 가져옵니다.
TableName은 DataTable의 이름을 가져오거나 설정합니다.
DataSet에서 일반적으로 사용되는 메서드:
Clear()는 DataTable에서 모든 데이터를 지웁니다.
Clone() 모든 DataTable 스키마 및 제약 조건을 포함하여 DataTable의 구조를 복제합니다.
EndInit() 양식에 사용되거나 다른 구성 요소에서 사용되는 DataTable의 초기화를 종료합니다. 초기화는 런타임에 발생합니다.
ImportRow(DataRow row) 모든 속성 설정과 초기 및 현재 값을 유지하면서 DataRow를 DataTable에 복사합니다.
Merge(DataTable table) 지정된 DataTable을 현재 DataTable과 병합합니다.
NewRow()는 테이블과 동일한 스키마를 사용하여 새 DataRow를 생성합니다.
AcceptChanges()는 AcceptChanges()에 대한 마지막 호출 이후 테이블에 대한 모든 변경 사항을 커밋합니다.
BeginInit() 양식에 사용되거나 다른 구성 요소에서 사용되는 DataTable의 초기화를 시작합니다. 초기화는 런타임에 발생합니다.
DataSet를 순회하는 방법
foreach(DataTable dt in dataSet.Tables)
foreach(DataRow dr in dt.Rows)
foreach(dr.Table.Columns의 DataColumn dc)
Console.WriteLine(dr[dc]);