2008-08-05 12 views
103

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

Jednak wiele przykładów w programie internetowym zamiast tego korzysta z DataSet i uzyskuje dostęp do tabel za pomocą metody kolekcji.

Czy korzystanie z DataSet lub DataTables jako metody przechowywania wyników SQL ma jakąkolwiek przewagę, jeśli chodzi o wydajność?

+0

Jeśli pracujesz z aplikacjami internetowymi, możesz rozważyć użycie obiektu 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

Odpowiedz

82

To naprawdę zależy od rodzaju danych, które przynosisz z powrotem. Ponieważ DataSet jest (w rzeczywistości) tylko zbiorem obiektów DataTable, możesz zwrócić wiele różnych zestawów danych w jeden, a tym samym łatwiejszy do zarządzania obiekt.

Jeśli chodzi o wydajność, bardziej prawdopodobne jest uzyskanie nieefektywności z niezoptymalizowanych zapytań niż z "niewłaściwego" wyboru konstrukcji .NET. Przynajmniej to było moje doświadczenie.

6

w 1.x były rzeczy, których DataTables nie mogły wykonać, które zestawy danych mogły (nie pamiętam dokładnie co). Wszystko, co zostało zmienione w 2.x. Domyślam się, że właśnie dlatego wiele przykładów nadal korzysta z DataSet. DataTables powinny być szybsze, ponieważ są bardziej lekkie. Jeśli wyciągasz tylko jeden zestaw wyników, jest to najlepszy wybór między tymi dwoma.

+3

Jednym wielkim problemem było to, że DataTable nie może być serializowany i nie może zostać zwrócony w wyniku WebService. –

5

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

+0

Można również uruchomić wiele kwerend wyboru SQL w jednym komendzie SQLC i uzyskać dostęp do każdego zestawu wyników w zbiorze danych. Tabele [i] – Jan

3

Istnieje kilka optymalizacji, które można wykorzystać podczas wypełniania DataTable, takie jak wywoływanie BeginLoadData(), wstawianie danych, a następnie wywoływanie EndLoadData(). To wyłącza pewne wewnętrzne zachowanie w DataTable, takie jak konserwacja indeksu, itp. Więcej szczegółów można znaleźć w this article.

19

Jedną z głównych różnic jest to, że DataSet może pomieścić wiele tabel i można zdefiniować relacje między tymi tabelami.

Jeśli zwracasz tylko jeden zestaw wyników, ale myślę, że DataTable byłaby bardziej zoptymalizowana. Sądzę, że musi być jakiś narzut (przyznany mały), aby zaoferować funkcjonalność, jaką robi DataSet i śledzić wiele DataTables.

0

Jeśli jednak zajmujesz się tylko jedną 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ć na wartość zerową.

Powiązane problemy