Datatable vs Dataset

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

Когда вы имеете дело только с одной таблицей, самая большая практическая разница, которую я обнаружил, заключается в том, что DataSet имеет метод HasChanges, но DataTable этого не делает. У обоих есть "GetChanges", поэтому вы можете использовать это и проверить для null.

Ответ 7

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