Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

Ответ 6

DataReader

DataReader используется для чтения данных из базы данных и является ориентированной только на чтение и переадресацию архитектуры при извлечении данных из базы данных. DataReader будет получать данные очень быстро по сравнению с набором данных. Обычно мы будем использовать объект ExecuteReader для привязки данных к datareader.

Чтобы привязать данные DataReader к GridView, нам нужно написать код, как показано ниже:

using(SqlConnection conn = new SqlConnection("Data Source=abc;Integrated Security=true;Initial Catalog=Test")) {  
            con.Open();  
            SqlCommand cmd = new SqlCommand("Select UserName, First Name,LastName,Location FROM Users", conn);  
            SqlDataReader sdr = cmd.ExecuteReader();  
            gvUserInfo.DataSource = sdr;  
            gvUserInfo.DataBind();  
            conn.Close();  

DataSet

DataSet - это несвязанная ориентированная архитектура, которая означает, что во время работы с наборами данных нет необходимости в активных соединениях, и это коллекция DataTables и отношения между таблицами. Он используется для хранения нескольких таблиц с данными. Вы можете выбрать таблицы форм данных, создать представления на основе таблицы и задать дочерние строки над отношениями. Также DataSet предоставляет вам богатые функции, такие как сохранение данных в формате XML и загрузка данных XML.

SqlConnection conn = new SqlConnection("Data Source=abc;Integrated Security=true;Initial Catalog=Test");  
    conn.Open();  
    SqlCommand cmd = new SqlCommand("Select UserName, First Name,LastName,Location FROM Users", conn);  
    SqlDataAdapter sda = new SqlDataAdapter(cmd);  
    DataSet ds = new DataSet();  
    da.Fill(ds);  
    gvUserInfo.DataSource = ds;  
    gvUserInfo.DataBind();