Datatable против набора данных

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

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

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

Если вы работаете с веб-приложениями, вы можете рассмотреть возможность использования DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspxaspnet.4guysfromrolla.com/articles/051805-1.aspxdevx.com/vb2themax/Article/19887/1954?pf=true

Chris Burgess 15.09.2008 17:38

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

Marc Gravell 12.07.2020 11:42

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

m_a_s 31.07.2020 18:53

@m_a_s явный t - классы, обычно; возможно "записи" в C# vNext

Marc Gravell 01.08.2020 01:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
134
4
116 716
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

Martin Clarke 05.07.2009 04:17
Ответ принят как подходящий

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

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

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

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

Jan 08.12.2017 13:31

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

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

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

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

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

Другие вопросы по теме