Datatable vs Dataset


129

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

Тем не менее, многие примеры в Интернете показывают использование 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
Крис Берджесс

В конечном счете, DataTable и DataSet были полезными переходами от ADO RecordSet ... еще в 2002 году. В наши дни не стоит превращать их в метафору первичных данных.
Марк Гравелл

@MarcGravell Что бы вы предложили в качестве метафоры первичных данных в наши дни?
m_a_s

@m_a_s явный t - классы, обычно; возможно «записи» в c # vNext
Марк Грейвелл

Ответы:


94

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

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


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, такие как обслуживание индекса и т. Д. См. Эту статью для получения дополнительных сведений.


1

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.