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.