데이터 테이블과 데이터 셋


129

현재 DataTable을 사용하여 코드에서 사용할 수있는 데이터베이스에서 결과를 가져옵니다.

그러나 웹의 많은 예제는 대신 DataSet을 사용하고 collections 메소드를 통해 테이블에 액세스하는 것을 보여줍니다.

SQL 결과에 대한 저장 방법으로 DataSet 또는 DataTable을 사용하는 것이 현명하거나 성능면에서 어떤 이점이 있습니까?



궁극적으로 DataTable과 DataSet은 2002 년에 ADO RecordSet에서 유용한 전환이었습니다. 요즘에는 기본 데이터 비유를 구워서는 안됩니다.
Marc Gravell

@MarcGravell 요즘 주요 데이터 비유로 무엇을 제안 하시겠습니까?
m_a_s

@m_a_s 명시 적 t-클래스, 일반적으로; 아마도 c # vNext의 "records"
Marc Gravell

답변:


94

실제로 가져 오는 데이터의 종류에 따라 다릅니다. DataSet은 사실상 DataTable 개체의 모음 일 뿐이므로 여러 개의 서로 다른 데이터 집합을 하나의 관리하기 쉬운 개체로 반환 할 수 있습니다.

성능 측면에서 .NET 구문의 "잘못된"선택보다 최적화되지 않은 쿼리의 비 효율성이 더 높습니다. 적어도 그것은 내 경험이었습니다.


29

한 가지 큰 차이점은 DataSet이 여러 테이블을 보유 할 수 있고 해당 테이블 간의 관계를 정의 할 수 있다는 것입니다.

단일 결과 집합 만 반환하는 경우 DataTable이 더 최적화 된 것으로 생각합니다. DataSet이 제공하는 기능을 제공하고 여러 DataTable을 추적하려면 약간의 오버 헤드 (작은 부여)가 있어야한다고 생각합니다.


8

1.x에서는 DataTables가 DataSets로 할 수 없었던 일이있었습니다 (정확히 무엇을 기억하지 못함). 2.x에서 변경된 모든 것. 내 생각에 많은 예제가 여전히 DataSet을 사용하는 이유입니다. DataTable은 더 가벼울수록 더 빨라야합니다. 단일 결과 집합 만 가져 오는 경우 둘 중 가장 좋은 선택입니다.


4
AFAIK의 가장 큰 장점은 DataTable을 serialize 할 수없고 WebService에서 결과로 반환 할 수 없다는 것입니다.
Martin Clarke

6

DataSet의 한 가지 기능은 저장 프로 시저에서 여러 select 문을 호출 할 수있는 경우 DataSet마다 각각 하나의 DataTable을 갖게된다는 것입니다.


하나의 SQLCommand에서 여러 SQL 선택 쿼리를 실행하고 데이터 세트의 각 결과 집합에 액세스 할 수도 있습니다. 테이블 [i]
Jan

3

BeginLoadData () 호출, 데이터 삽입, EndLoadData () 호출과 같이 DataTable을 채울 때 사용할 수있는 최적화 방법이 있습니다. 이렇게하면 인덱스 유지 관리 등과 같은 DataTable 내의 일부 내부 동작이 해제됩니다. 자세한 내용은 이 문서 를 참조 하십시오.


1

어쨌든 단일 테이블 만 처리 할 때 내가 찾은 가장 큰 차이점은 DataSet에는 "HasChanges"메서드가 있지만 DataTable은 없다는 것입니다. 그러나 둘 다 "GetChanges"를 가지고 있으므로이를 사용하여 null을 테스트 할 수 있습니다.


0

DataTable 개체는 테이블 형식의 데이터를 행, 열 및 제약 조건의 메모리 내 테이블 형식 캐시로 나타냅니다. DataSet은 DataRelation 개체와 서로 관련 될 수있는 DataTable 개체 컬렉션으로 구성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.