В настоящее время я использую DataTable для получения результатов из базы данных, которую я могу использовать в своем коде.
Тем не менее, многие примеры в Интернете показывают, что вместо этого используется DataSet и осуществляется доступ к таблицам с помощью метода коллекций.
Есть ли какое-либо преимущество, с точки зрения производительности или иного, от использования DataSets или DataTables в качестве метода хранения результатов SQL?
В конечном счете, DataTable и DataSet были полезными переходами от ADO RecordSet ... еще в 2002 году. В наши дни не стоит превращать их в метафору первичных данных.
@MarcGravell Что бы вы предложили в качестве метафоры первичных данных в наши дни?
@m_a_s явный t - классы, обычно; возможно "записи" в C# vNext





в 1.x раньше были вещи, которые DataTables не могли делать, а DataSets могли (не помню, что именно). Все это было изменено в 2.x. Я предполагаю, что именно поэтому во многих примерах до сих пор используются DataSets. DataTables должны быть быстрее, поскольку они более легкие. Если вы выбираете только один набор результатов, это лучший выбор между ними.
AFAIK, одна большая проблема заключалась в том, что DataTable не мог быть сериализован и не мог быть возвращен в результате из WebService.
Это действительно зависит от типа данных, которые вы возвращаете. Поскольку DataSet (по сути) представляет собой просто набор объектов DataTable, вы можете возвращать несколько различных наборов данных в один и, следовательно, более управляемый объект.
С точки зрения производительности у вас больше шансов получить неэффективность из-за неоптимизированных запросов, чем из-за «неправильного» выбора конструкции .NET. По крайней мере, таков мой опыт.
Одна из особенностей DataSet заключается в том, что если вы можете вызывать несколько операторов select в ваших хранимых процедурах, DataSet будет иметь по одному DataTable для каждой.
Вы также можете запустить несколько запросов SQL select в одной команде SQLCommand и получить доступ к каждому набору результатов в наборе данных. Таблицы [i]
Есть некоторые оптимизации, которые вы можете использовать при заполнении DataTable, например, вызов BeginLoadData (), вставку данных, а затем вызов EndLoadData (). Это отключает некоторое внутреннее поведение в DataTable, такое как обслуживание индекса и т. д. Подробнее см. Эта статья.
Одно из основных отличий заключается в том, что DataSets могут содержать несколько таблиц, и вы можете определять отношения между этими таблицами.
Если вы возвращаете только один набор результатов, я бы подумал, что DataTable будет более оптимизирован. Я бы подумал, что должны быть некоторые накладные расходы (небольшие), чтобы предлагать функциональность, которую выполняет DataSet, и отслеживать несколько DataTables.
Когда вы все равно имеете дело только с одной таблицей, самое большое практическое различие, которое я обнаружил, заключается в том, что DataSet имеет метод HasChanges, а DataTable - нет. Однако у обоих есть «GetChanges», так что вы можете использовать его и проверить значение null.
Объект DataTable представляет табличные данные в виде табличного кэша строк, столбцов и ограничений в памяти. DataSet состоит из набора объектов DataTable, которые можно связать друг с другом с помощью объектов DataRelation.
Если вы работаете с веб-приложениями, вы можете рассмотреть возможность использования DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspxaspnet.4guysfromrolla.com/articles/051805-1.aspxdevx.com/vb2themax/Article/19887/1954?pf=true