2008-08-05 2 views
103

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

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

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

+0

Если вы работаете с веб-приложениями, вам может потребоваться использовать DataReader: http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/ 051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true – GernBlandston 2008-09-15 13:38:09

ответ

82

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

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

6

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

+3

AFAIK один большой, что DataTable не может быть сериализован и не может быть возвращен в результате из WebService. – 2009-07-05 00:17:55

5

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

+0

Вы также можете запускать несколько запросов выбора SQL в одном SQLCommand и обращаться к каждому набору результатов в наборе данных. Таблицы [i] – Jan 2017-12-08 10:31:31

3

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

19

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

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

0

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

Смежные вопросы