Datatable vs Dataset

129

В настоящее время я использую DataTable для получения результатов из базы данных, которую я могу использовать в своем коде.

Тем не менее, многие примеры в Интернете показывают использование DataSet вместо этого и доступ к таблицам через метод коллекций.

Есть ли какое-либо преимущество, с точки зрения производительности или иного, от использования DataSets или DataTables в качестве метода хранения результатов SQL?

GateKiller
источник
1
Если вы работаете с веб-приложениями, вы можете рассмотреть возможность использования DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Статья / 19887/1954? Pf = true
Крис Берджесс
В конечном счете, DataTable и DataSet были полезными переходами от ADO RecordSet ... еще в 2002 году. В наши дни не стоит превращать их в метафору первичных данных.
Марк Гравелл
@MarcGravell Что бы вы предложили в качестве метафоры первичных данных в наши дни?
m_a_s
@m_a_s явный t - классы, обычно; возможно «записи» в c # vNext
Марк Грейвелл

Ответы:

94

Это действительно зависит от типа данных, которые вы возвращаете. Поскольку DataSet (по сути) представляет собой просто набор объектов DataTable, вы можете возвращать несколько различных наборов данных в один и, следовательно, более управляемый объект.

С точки зрения производительности у вас больше шансов получить неэффективность из-за неоптимизированных запросов, чем из-за «неправильного» выбора конструкции .NET. По крайней мере, таков мой опыт.

ZombieSheep
источник
29

Одно из основных отличий заключается в том, что DataSets могут содержать несколько таблиц, и вы можете определять отношения между этими таблицами.

Если вы возвращаете только один набор результатов, я бы подумал, что DataTable будет более оптимизирован. Я бы подумал, что должны быть некоторые накладные расходы (хотя и небольшие), чтобы предлагать функциональные возможности DataSet и отслеживать несколько DataTables.

Джошуа Хадсон
источник
8

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

Карл Сегин
источник
4
AFAIK одним из самых больших было то, что DataTable не мог быть сериализован и не мог быть возвращен в результате из WebService.
Мартин Кларк
6

Одна из особенностей DataSet заключается в том, что если вы можете вызывать несколько операторов select в ваших хранимых процедурах, DataSet будет иметь по одному DataTable для каждой.

Шон
источник
Вы также можете запустить несколько SQL запросов на выборку в одном SQLCommand и доступ к каждому результирующем в dataset.Tables [я]
Jan
3

Есть некоторые оптимизации, которые вы можете использовать при заполнении DataTable, например, вызов BeginLoadData (), вставку данных, а затем вызов EndLoadData (). Это отключает некоторые внутренние функции DataTable, такие как обслуживание индекса и т. Д. См. Эту статью для получения дополнительных сведений.

tbreffni
источник
1

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

MickeyfAgain_BeforeExitOfSO
источник
0

Объект DataTable представляет табличные данные в виде табличного кэша строк, столбцов и ограничений в памяти. DataSet состоит из набора объектов DataTable, которые можно связать друг с другом с помощью объектов DataRelation.

Нишал Тяги
источник