Как сопоставить строки из базы данных в список объектов?

Ниже приведен пример класса объекта и файла .txt. Я использую файловые помощники для создания этого класса, затем я читаю файл .txt с помощью FileHelpers, и он преобразует этот файл в эти объекты, и я помещаю их в список.

.txt-файл:

1122233
4455566

Пример класса:

[FixedLengthRecord(FixedMode.AllowLessChars)]
public class Example
{

    [FieldFixedLength(2)]
    public string first;

    [FieldFixedLength(3)]
    public string second;

    [FieldFixedLength(2)]
    public string third;
}

Чтение этого с помощью файловых помощников дает мне 2 объекта примера. Первое значение Example.first равно «11» и т. д. Я помещаю эти данные в базу данных, преобразуя список в DataTable и используя SqlBulkCopy. Все идет хорошо.

Таблица в базе данных просто содержит 3 столбца (varchar) с именами столбцов; первый, второй и третий.

Проблема возникает, когда я пытаюсь извлечь данные из базы данных и сопоставить их обратно в список. Для этого я использую следующий код (используя Dapper):

IDbConnection connection = new SqlConnection(connectionString);
var rows = connection.Query<Example>("select * from examplesTable");
        foreach (Example e in rows)
        {
            examples.Add(e);    //List<Example> examples
        }

Это возвращает правильное количество строк, однако, если я попытаюсь получить данные из объектов, они содержат нулевые данные. Я не могу понять, что я делаю неправильно.


person RedZerg    schedule 06.10.2015    source источник
comment
однако, если я попытаюсь получить данные из объектов - к какой части кода это относится?   -  person Hugh    schedule 06.10.2015
comment
@Hughnited Я проверил это, добавив MessageBox.Show(e.First); в цикл foreach, но ничего не показывает (пустое окно). Я также попытался преобразовать этот список в DataTable и отправить его обратно в базу данных, в результате он помещает правильное количество строк, но все данные пусты.   -  person RedZerg    schedule 06.10.2015
comment
В foreach: examples.Add(e); MessageBox.Show(e.First); // возвращает пустое окно.   -  person RedZerg    schedule 06.10.2015


Ответы (2)


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

Есть ли в таблице в студии управления SQL правильные данные?

Если у вас есть правильные данные, попробуйте просто прочитать как таблицу данных, чтобы увидеть, что возвращается, поскольку это будут значения объекта, а не определенный тип.

person netniV    schedule 06.10.2015
comment
Спасибо за ответ. Да, данные загружаются правильно. Я попробовал ваш совет, прочитав его как DataTable, и это сработало! Он показывает все правильные данные. Но мне нужен список объектов данных, поэтому я попытался преобразовать этот datatable в список, и снова он показывает все нули.. :( - person RedZerg; 06.10.2015
comment
Я исправил это, мое преобразование в список было плохим. Спасибо за идею прочитать его как DataTable! - person RedZerg; 06.10.2015

Невозможно просто написать foreach (Example e in rows), вы должны создать конструктор для примера, который создаст объект примера на основе данных из каждой строки. Это будет выглядеть как

foreach (DaraRow r in rows)
        {
            Example e = new Examaple(r["First"],r["Second"]);
            examples.Add(e);    //List<Example> examples
        }
person Aleksa Milosevic    schedule 06.10.2015
comment
Спасибо, я попробую это. - person RedZerg; 06.10.2015