Запись данных в файл базы данных, по одной записи за раз

#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. Это выглядит довольно неплохо, Гуффа. Я попробую и посмотрю, что получится. Большое спасибо!