Ваша программа должна быть такой. Каждый раз, когда вы устанавливаете данные в fuOb, они отменяют предыдущие данные.
FultonObj fuOb1 = new FultonObj();
fuOb1.setFileNo(file1);
fuOb1.setParcelId(parcelId1);
fuOb1.setSitus(situs1);
list.add(fuOb1);
FultonObj fuOb2 = new FultonObj();
fuOb2.setFileNo(file2);
fuOb2.setParcelId(parcelId2);
fuOb2.setSitus(situs2);
list.add(fuOb2);
DataAdapter использует DataReader под капотом, таким образом, Ваш опыт, вероятно, был бы тем же.
Преимущество DataAdapter - Вы, отключает много кода, для которого было бы нужно обслуживание.
Эти дебаты являются чем-то вроде религиозной проблемы, так определенно озираются и решают что работы лучше всего для Вашей ситуации:
Принятие Вас на самом деле хочет все данные, возвращающиеся из базы данных, время, потраченное в базе данных и в сети почти наверняка, затмит время, потраченное незавершенный для заполнения структур данных в памяти.
Да, в некоторых случаях Вы могли бы получить маленькое сохранение при помощи DataReader - и в особенности если Вы хотите передать данные потоком, может быть полезно - но если бы Вам действительно на самом деле нужно все это, я придерживался бы самого простого кода. Если Вы полагаете, что население DataSet вызывает значительную проблему производительности, представьте его и затем попытайтесь улучшить его.
Я не могу говорить с заполнением таблицы данных по сути, но использование datareader является самым эффективным методом чтения.
datareader быстрее. И если Вы используете 2.0 + Вы, probablt не должны даже использовать таблицу данных. Можно использовать универсальный список объекта.
Ваша опция № 1 была бы медленнее. Однако существует лучший способ преобразовать datareader в таблицу данных, чем добавление пользовательских строк вручную:
DataTable dt = new DataTable();
using (SqlConnection conn = GetOpenSqlConnection())
using (SqlCommand cmd = new SqlCommand("SQL Query here", conn)
using (IDataReader rdr = cmd.ExecuteReader())
{
dt.Load(rdr);
}
Я не могу прокомментировать различие между этим и использованием .Fill()
.
Хорошо иметь DataReader, когда Вы должны, например, показать прогресс загружающихся данных. В DataSet Вы не можете сделать чего-то в середине загружающихся данных.
С другой стороны, DataSet является единым объектом. Таким образом, DataSet намного медленнее. DataReader может дать Вам дополнительное повышение в местах в Вашем коде, где операция данных является очень медленной. В этих местах изменяют его от DataSet до DataReader. DataReader также занимает меньше места в памяти.
О, курс, требуется больше времени для кодирования хорошего DataReader, но это стоит того. Например, когда Вы играете с изображениями или музыкой, взятой от базы данных.
Как со многими вопросами как это ответ: зависит.
Если Вы не знаете структуру своих данных впереди и создаете TableAdapters на лету, то динамический DataTable был бы более эффективным. Существует большая генерация кода, вовлеченная в создание TableAdapter.
Однако, если Вы знаете структуру своих данных впереди затем, вопрос становится, В каком количестве функциональности я нуждаюсь?
При необходимости в полной реализации CRUD затем существует некоторая эффективность, полученная при помощи TableAdapter вместо того, чтобы писать все это код CRUD сами. Кроме того, реализация TableAdapter в порядке (не большая). При необходимости в чем-то более эффективном затем, можно быть более обеспеченным использованием nHibernate или некоторым другим ORM.
Если Вам не нужна полная реализация CRUD (т.е. это - решение только для чтения), и знайте свою структуру данных впереди, то необходимо будет протестировать эффективность TableAdapter реализация только для чтения против динамично сгенерированного DataTable. Если я был держащим пари человеком, я поместил свои деньги на реализации TableAdapter, так как Вы связываете данные однажды и читаете их многократно.