Datatable vs Dataset


129

В даний час я використовую таблицю даних для отримання результатів із бази даних, яку я можу використовувати у своєму коді.

Однак багато прикладів в Інтернеті показують використання DataSet замість цього та доступ до таблиць (и) через метод колекцій.

Чи є якась перевага використання даних DataSets або DataTables як метод зберігання результатів SQL?


1
Якщо ви працюєте з веб-додатками, можливо, ви захочете скористатися DataReader : aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Стаття / 19887/1954? Pf = true
Chris Burgess

Зрештою, DataTable і DataSet були корисними переходами з ADO RecordSet ... ще в 2002 році. У цей час ви не повинні використовувати їх основну метафору даних.
Марк Гравелл

@MarcGravell Що б ви запропонували як основну метафору даних сьогодні?
m_a_s

@m_a_s явні t - класи, як правило; можливо "записи" в c # vNext
Марк Гравелл

Відповіді:


94

Це дійсно залежить від типу даних, які ви повертаєте. Оскільки DataSet є (фактично) лише колекцією об'єктів DataTable, ви можете повернути кілька окремих наборів даних в один, а отже, більш керований об'єкт.

Виходячи з продуктивності, ви, швидше за все, отримаєте неефективність від неоптимізованих запитів, ніж від "неправильного" вибору конструкції .NET. Принаймні, це був мій досвід.


29

Одна з головних відмінностей полягає в тому, що DataSets може містити кілька таблиць, і ви можете визначати зв'язки між цими таблицями.

Якщо ви повертаєте лише один набір результатів, хоча я думаю, що DataTable буде оптимізованішим. Я б подумав, що має бути деякий накладні витрати (надані невеликі), щоб запропонувати функціонал, який працює DataSet і відслідковувати декілька таблиць даних.


8

в 1.x раніше існували речі, які DataTables не могли робити, які могли би набір даних (не пам'ятаю, що саме). Все, що було змінено в 2.х. Я здогадуюсь, тому багато прикладів все ще використовують DataSets. Таблиці даних повинні бути швидшими, оскільки вони легші. Якщо ви витягуєте лише один набір результатів, найкращий вибір між ними.


4
AFAIK одним із важливих моментів є те, що DataTable не може бути серіалізовано і не може бути повернуто в результаті WebService.
Мартін Кларк

6

Однією з особливостей DataSet є те, що якщо ви можете викликати кілька операторів вибору у збережених процедурах, у DataSet буде по одному DataTable для кожного.


Ви також можете запустити декілька запитів вибору SQL в одному SQLCommand та отримати доступ до кожного набору результатів у наборі даних. Таблиці [i]
січня

3

Існують деякі оптимізації, які ви можете використовувати при заповненні таблиці даних, наприклад, виклик BeginLoadData (), вставлення даних, а потім виклик EndLoadData (). Це вимикає деяку внутрішню поведінку в DataTable, наприклад, обслуговування індексу тощо. Щоб отримати докладнішу інформацію , див. Цю статтю .


1

Якщо ви все-таки маєте справу лише з однією таблицею, найбільша практична різниця, яку я знайшов, полягає в тому, що DataSet має метод "HasChanges", але DataTable цього не робить. В обох є "GetChanges", тому ви можете використовувати це і перевірити на null.


0

Об'єкт DataTable представляє табличні дані у вигляді пам'яті, табличного кеша рядків, стовпців та обмежень. DataSet складається з набору об'єктів DataTable, які ви можете зв’язати один з одним об'єктами DataRelation.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.