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?
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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 .
źródło
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.
źródło
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.
źródło