Что лучше: DataSet или DataReader?

Я только что увидел эту тему: Datatable vs Dataset, но это не решило моих сомнений. Позвольте мне объяснить лучше, я делал связь с базой данных и должен был показать результаты в GridView. (Я использовал RecordSet, когда я работал с VB6, и DataSet очень похож на него, поэтому было намного проще использовать DataSet.) Затем парень сказал мне, что DataSet не лучший метод.

Итак, следует ли «изучать» DataReader или продолжать использовать DataSet? Таблица данных ? Каковы плюсы и минусы?

Это зависит от ваших потребностей. Одно из самых важных отличий заключается в том, что DataReader сохранит открытое соединение с вашей базой данных, пока вы не закончите с ним, в то время как DataSet будет объектом в памяти. Если вы привязываете элемент управления к DataReader, он остается открытым. Кроме того, DataReader представляет собой прямой подход к чтению данных, которые нельзя манипулировать. С DataSet вы можете перемещаться вперед и назад и манипулировать данными по своему усмотрению.

Некоторые дополнительные функции: DataSets могут быть сериализованы и представлены в XML и, следовательно, легко передаются другим уровням. DataReaders не могут быть сериализованы.

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

Вот ссылка, которая немного устарела, но по-прежнему полезна: Контраст ADO.NET DataReader и DataSet .

Это по существу: «что лучше: ведро или шланг?»

Здесь DataSet – это ведро; это позволяет вам переносить несвязанный dataset и работать с ним, – но вы понесете расходы на ведение ковша (поэтому лучше всего держать его в удобном для вас размере).

Считыватель данных – это шланги: он обеспечивает односторонний / один раз доступ к данным, когда он пролетает мимо вас; вам не нужно одновременно переносить всю доступную воду, но ее необходимо подключить к крану / базе данных.

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

То, что я пытаюсь сделать, это то, что они делают разные вещи …

Я не часто использую DataSet очень часто, но некоторые люди любят их. Однако я использую считыватели данных для доступа к BLOB и т. Д.

В дополнение к точке Марка : вы можете использовать DataSet без какой-либо базы данных.

Вы можете заполнить его из файла XML или только из программы. Заполните его строками из одной базы данных, затем разверните их и запишите в другую базу данных.

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

Различные потребности, разные решения.

Как вы сказали, dataset больше похож на VB6 Recordset. То есть, вытащите нужные данные, передайте их, сделайте с ними то, что хотите. О, а потом, в конце концов, избавитесь от этого, когда закончите.

Datareader более ограничен, но он дает МНОГО более высокую производительность, когда вам нужно только один раз прочитать данные. Например, если вы сами заполняете сетку, т. Е. Извлекаете данные, запускаете их, чтобы каждая строка заполняла сетку, а затем выбрасывала данные. Datareader намного лучше, чем dataset. С другой стороны, даже не пытайтесь использовать datareader, если у вас есть намерение обновлять данные …

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

Чтобы ответить на второй вопрос – да, вы должны узнать о DataReaders. Во всяком случае, вы понимаете, как их использовать.

Я думаю, что вам лучше в этой ситуации использовать DataSets – так как вы выполняете привязку данных и все (я думаю, что циклы процессора против человеческих усилий).

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

  • LINQ to Entities не распознает метод 'System.Web.Mvc.FileResult'
  • Std :: map, которые отслеживают порядок вставки?
  • Могу ли я использовать std :: async, не дожидаясь будущего ограничения?
  • Теперь, когда у нас есть std :: array, какие применения остаются для массивов в стиле C?
  • Нет доступных источников
  • Чтение метаданных внешнего ключа программным путем с помощью Entity Framework 4
  • Http Post для Windows Phone 8
  • Как написать в середине файла в C ++?
  • Как получить библиотеку / заголовки GL?
  • Рекурсивное объявление указателя функции в C
  • Как отслеживать изменения содержимого буфера обмена в C #?
  • Interesting Posts

    Печать цветов фона в Chrome

    Лучший способ сохранить упорядоченный список в базе данных, сохраняя порядок

    Ошибка сегментации сборки после выполнения системного вызова, в конце моего кода

    Как установить GLUT и OpenGL в Visual Studio 2012?

    Требуется ли proguard.cfg для проектов библиотеки?

    Найти местоположение внешней SD-карты

    MySQL ERROR 1045 (28000): доступ запрещен для пользователя ‘bill’ @ ‘localhost’ (с использованием пароля: YES)

    Android: сохранение файла навсегда (даже после четких данных / удаления)

    Как я могу использовать указатели в Java?

    Каковы плюсы и минусы использования альтернативного DNS вместо DNS-сервера ISP?

    Включить / отключить раскрывающийся список в jquery

    В Windows можно создавать эти странно названные, заблокированные версии .doc-файлов?

    @ «Какой-то текст» дает автореализацию или сохранение 1 объекта назад?

    Почему я получаю исключение с сообщением «Неверная настройка для не виртуального (переопределяемого в VB) члена …»?

    Могу ли я полностью отключить Cortana в Windows 10?

    Давайте будем гением компьютера.