2008-08-05 16 views
103

현재 DataTable을 사용하여 코드에서 사용할 수있는 데이터베이스의 결과를 얻습니다.Datatable 대 데이터 집합

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

SQL 결과의 저장 방법으로 DataSets 또는 DataTables를 사용하면 성능면에서 유리합니까?

+0

웹 응용 프로그램을 사용하는 경우 DataReader 사용을 고려할 수 있습니다. http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/ 051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true – GernBlandston

답변

82

정말로 가져 오는 데이터의 종류에 달려 있습니다. DataSet은 (사실상) DataTable 개체의 컬렉션이기 때문에 여러 개의 고유 한 데이터 집합을 단일 개체로 관리 할 수 ​​있으므로 더 많은 개체를 관리 할 수 ​​있습니다.

성능상으로, "잘못된".NET 구성 선택보다 최적화되지 않은 쿼리가 비효율적 일 수 있습니다. 적어도 그것은 제 경험이었습니다.

6

1.x에는 DataTables가 수행 할 수없는 작업 (이전에는 정확히 무엇을 기억하지 못했는지)이있었습니다. 모든 것은 2.x에서 변경되었습니다. 내 생각 엔 많은 예제가 여전히 DataSets을 사용하는 이유입니다. DataTables은 더 가볍기 때문에 더 빨라야합니다. 단일 결과 집합 만 가져 오는 경우 두 집합 사이에서 최상의 결과를 얻을 수 있습니다.

+3

AFAIK 한 가지 큰 점은 DataTable을 직렬화 할 수 없어서 결과로 반환 될 수 없다는 것이 었습니다. WebService. –

5

DataSet의 기능 중 하나는 저장 프로 시저에서 여러 select 문을 호출 할 수 있으면 DataSet에 각각 하나의 DataTable이 있다는 것입니다.

+0

하나의 SQLCommand에서 여러 SQL SELECT 쿼리를 실행하고 dataset.Tables [i]의 각 결과 집합에 액세스 할 수도 있습니다. – Jan

3

BeginLoadData()를 호출하고 데이터를 삽입 한 다음 EndLoadData()를 호출하는 등 DataTable을 작성할 때 사용할 수있는 최적화가 있습니다. 이렇게하면 인덱스 유지 관리와 같은 DataTable 내부 동작이 해제됩니다. 자세한 내용은 this article을 참조하십시오.

19

하나의 큰 차이점은 DataSets가 여러 테이블을 보유 할 수 있으며 이러한 테이블 간의 관계를 정의 할 수 있다는 것입니다.

하나의 결과 집합 만 반환하는 경우 DataTable이 더욱 최적화 될 것이라고 생각합니다. DataSet에서 수행하는 기능을 제공하고 여러 DataTable을 추적하려면 약간의 오버 헤드가 있어야한다고 생각합니다.

0

어쨌든 하나의 테이블 만 처리 할 때 가장 큰 실용적인 차이점은 DataSet에는 "HasChanges"메서드가 있지만 DataTable에는 없다는 것입니다. 두 가지 모두 "GetChanges"를 가지고 있으므로 null을 테스트하고 사용할 수 있습니다.