#c# #database #datatable
#c# #База данных #данные
Вопрос:
Я хочу написать программу на C #, которая будет считывать строку из datatable (с именем loadDT) и обновлять файл базы данных (с именем Forecasts.mdb).
Моя таблица данных выглядит следующим образом (значение каждого дня — это число, представляющее прогноз использования киловатт):
Hour Day1 Day2 Day3 Day4 Day5 Day6 Day7
1 519 520 524 498 501 476 451
Мой файл базы данных выглядит следующим образом:
Day Hour KWForecast
1 1 519
2 1 520
3 1 524
… и так далее.
В принципе, я хочу иметь возможность считывать одну строку из datatable, а затем экстраполировать ее в мой файл базы данных, по одной записи за раз. Каждая строка из datatable приведет к семи записям, записанным в файл базы данных. Есть идеи о том, как это сделать? Я могу подключиться к своей базе данных, строка подключения работает, и я могу обновлять и удалять из базы данных. Я просто не могу понять, как делать это по одной записи за раз.
Ответ №1:
Вы пробовали перебирать записи во входной базе данных и для каждой записи выполнять семь вставок в выходную базу данных?
Во многом зависит от того, какие API вы используете, он будет иметь такой шаблон:
var inputRecordSet = // connect somehow
var outputRecordSet = // ditto
while (!inputRecordSet.EOF)
{
outputRecordSet.Hour = inputRecordSet.Hour;
outputRecordSet.Day1 = inputRecordSet.Day;
outputRecordSet.KWForecast = inputRecordSet.Day1;
outputRecordSet.Insert();
outputRecordSet.Day2 = inputRecordSet.Day;
outputRecordSet.KWForecast = inputRecordSet.Day2;
outputRecordSet.Insert();
// and so on... for seven days
inputRecordSet.MoveNext();
}
Комментарии:
1. На самом деле, нет, я этого не пробовал … но, возможно, это неплохая идея! Я могу перебрать datatable с помощью foreach и вставить семь записей в базу данных, а затем перейти к следующей строке в datatable. Хм. Спасибо! Я попробую это сейчас!
Ответ №2:
Один из способов — поместить значения в массив и выполнить цикл над ним:
while (reader.Read()) {
int hour = reader.ReadInt32(0);
int[] days = {
reader.ReadInt32(1),
reader.ReadInt32(2),
reader.ReadInt32(3),
reader.ReadInt32(4),
reader.ReadInt32(5),
reader.ReadInt32(6),
reader.ReadInt32(7)
};
for (int day = 0; day < days.Length; day ) {
// insert day 1, hour and days[day] in the database
}
}
Комментарии:
1. Это выглядит довольно неплохо, Гуффа. Я попробую и посмотрю, что получится. Большое спасибо!