Загрузка информации из базы данных проблемы в C # - PullRequest
1 голос
/ 23 июня 2011

Это то, что я пытаюсь сделать. У меня есть база данных, которую я читаю, используя код:

OleDbCommand command;
command = new OleDbCommand("SELECT " + Student.ID + " FROM " + newStudent.DataFile, conn);
conn.Open();
dt.Load(command.ExecuteReader());
conn.Close();

Затем я связываю данные с представлением таблицы данных и отображаю содержимое таблицы. Теперь проблема в том, что у меня есть больше информации для добавления в datatable dt, которого нет в базе данных. Например, у меня есть поле для объекта студента с именем Grade, которое не найдено в файле данных, но введено пользователем и сохранено в свойстве для объекта студента.

Вместо загрузки результата запроса в таблицу данных, есть способ загрузить его в список, чтобы я мог вручную создать строки и столбцы для таблицы данных в другом методе, а затем добавить содержимое списка (содержащего идентификатор) и информация о классе в объекте студента вручную?

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Если вы не хотите использовать полнофункциональную среду ORM, такую ​​как предложенная @Bas ...

Взгляните на метод ToTable , доступный на Dataview в Datatable. Вы можете получить DataView для вашего Datatable, просто используя DataTable.DefaultView:

List<Long> myList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().ToList()
myList.Add(1234)
//etc

Кроме того, вы можете загрузить дополнительные данные, которые вы хотите добавить, во второй набор данных и использовать метод DataTable.Merge

РЕДАКТИРОВАТЬ: Чтобы учесть необходимость добавления дополнительных столбцов, вы можете изменить предложенный выше список следующим образом:

// Create a class to hold the information you want to bind, 
// you could use anonymous types if preferred
class MyDataRow
{
    public long ID { get; set; }
    public string AnotherColumn { get; set; }
    public string AndAnotherColumn { get; set; }
}

// then later on when creating that list use something along the lines of:
List<MyDataRow> myList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().Select(x => new MyDataRow { ID = x.ID }).ToList()
// you now have a list of MyDataRow which you can work with
// for example...
if (myList.Any())
    myList.First().AnotherColumn = "foo";

// as an exmaple of using an anoymous type (not my preference, but an option nonetheless)
var anonymousList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().Select(x => new { ID = x.ID, whateverYouWantToCallIt = "some other data but this is read only property" }).ToList()
// you can work with the anonymous list in much the same way, it just isn't explicitly declared
// and the properties are Read Only
if (anonymousList.Any())
    Console.WriteLine(anonymousList.First().whateverYouWantToCallIt);
0 голосов
/ 23 июня 2011

Вы можете использовать Entity Framework для извлечения объектной модели из вашей базы данных.После этого вы можете добавить свойство оценки для вашего объекта (из-за того, что эти объекты создаются в частичных классах).Это обеспечивает (значительно) более структурированный / простой в использовании способ добавления настраиваемой логики и атрибутов в структуру данных.

Вы можете привязать компоненты GUI к объектам инфраструктуры объектов аналогично обычному ADO..NET.

...