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

Ответьте за ограниченную, специфическую ситуацию: если вы хотите удалить файлы при сохранении дерева подпапок, вы можете использовать рекурсивный алгоритм:

import os

def recursively_remove_files(f):
    if os.path.isfile(f):
        os.unlink(f)
    elif os.path.isdir(f):
        map(recursively_remove_files, [os.path.join(f,fi) for fi in os.listdir(f)])

recursively_remove_files(my_directory)

Может быть, немного не по теме, но я думаю, что многие нашел бы это полезным

53
задан Community 23 May 2017 в 02:26
поделиться

5 ответов

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

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

74
ответ дан 7 November 2019 в 08:12
поделиться

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

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

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

12
ответ дан 7 November 2019 в 08:12
поделиться

По сути, это: «что лучше: ведро или шланг?»

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

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

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

Я пытаюсь подчеркнуть, что они делают разные вещи ...

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

201
ответ дан 7 November 2019 в 08:12
поделиться

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

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

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

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

5
ответ дан 7 November 2019 в 08:12
поделиться

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

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

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

0
ответ дан 7 November 2019 в 08:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: