Datatable vs Dataset


129

Obecnie używam DataTable, aby uzyskać wyniki z bazy danych, których mogę użyć w moim kodzie.

Jednak wiele przykładów w sieci Web pokazuje, że zamiast tego używają DataSet i uzyskują dostęp do tabel za pomocą metody collections.

Czy jest jakaś korzyść, pod względem wydajności lub nie, z używania DataSets lub DataTables jako metody przechowywania wyników SQL?



Ostatecznie DataTable i DataSet były pożytecznymi przejściami z ADO RecordSet ... w 2002 roku. W dzisiejszych czasach nie należy upiec ich jako podstawowej metafory danych.
Marc Gravell

@MarcGravell Co w dzisiejszych czasach sugerowałbyś jako podstawową metaforę danych?
m_a_s

@m_a_s jawne t - klasy, zazwyczaj; być może „zapisy” w c # vNext
Marc Gravell

Odpowiedzi:


94

To naprawdę zależy od rodzaju danych, które przynosisz. Ponieważ DataSet jest (w efekcie) tylko zbiorem obiektów DataTable, można zwrócić wiele różnych zestawów danych do jednego, a zatem łatwiejszego w zarządzaniu obiektu.

Pod względem wydajności bardziej prawdopodobne jest, że niezoptymalizowane zapytania będą nieefektywne niż z powodu „złego” wyboru konstrukcji .NET. Przynajmniej takie było moje doświadczenie.


29

Jedną z głównych różnic jest to, że DataSets może zawierać wiele tabel i można definiować relacje między tymi tabelami.

Jeśli zwracasz tylko jeden zestaw wyników, myślę, że DataTable byłby bardziej zoptymalizowany. Wydaje mi się, że musi istnieć pewien narzut (przyznany niewielki), aby zaoferować funkcjonalność zestawu DataSet i śledzić wiele DataTables.


8

w 1.x były rzeczy, których DataTables nie mógł zrobić, a których DataSets nie potrafił (nie pamiętam dokładnie co). Wszystko to zostało zmienione w wersji 2.x. Domyślam się, że dlatego wiele przykładów nadal używa DataSets. DataTables powinno działać szybciej, ponieważ są lżejsze. Jeśli wyciągasz tylko jeden zestaw wyników, to najlepszy wybór między nimi.


4
Okazuje się, że jednym wielkim problemem jest to, że DataTable nie może zostać serializowany i nie może zostać zwrócony w wyniku usługi WebService.
Martin Clarke,

6

Jedną z funkcji DataSet jest to, że jeśli możesz wywołać wiele instrukcji Select w procedurach składowanych, DataSet będzie miał jedną DataTable dla każdego.


Możesz również uruchomić wiele zapytań SQL wybierających w jednej SQLCommand i uzyskać dostęp do każdego zestawu wyników w zestawie danych. Tabele [i]
styczeń

3

Istnieje kilka optymalizacji, których można użyć podczas wypełniania DataTable, takich jak wywołanie BeginLoadData (), wstawienie danych, a następnie wywołanie EndLoadData (). Spowoduje to wyłączenie niektórych zachowań wewnętrznych w DataTable, takich jak konserwacja indeksu itp. Więcej informacji można znaleźć w tym artykule .


1

Kiedy i tak masz do czynienia tylko z pojedynczą tabelą, największą praktyczną różnicą, jaką znalazłem, jest to, że DataSet ma metodę „HasChanges”, ale DataTable nie. Oba mają jednak „GetChanges”, więc możesz go użyć i przetestować pod kątem wartości null.


0

Obiekt DataTable reprezentuje dane tabelaryczne jako zapisaną w pamięci, tabelaryczną pamięć podręczną wierszy, kolumn i ograniczeń. DataSet składa się z kolekcji obiektów DataTable, które można powiązać ze sobą za pomocą obiektów DataRelation.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.