У меня есть служба Windows, которая при запуске идет по пути, который я определяю и собираю список файлов, и у каждого файла есть записи в нем, которые я вставляю в базу данных (Oracle). Моя проблема в том, что если эта база данных сбилась или если некоторая исключение, как буду я откатить предыдущий рекорд, который вставляется из файла .. Для примераКак откат в Windows Service?
у меня есть 10 файлов каждый файл имеет 5 записей при разборе 7-файла Существует своего рода исключение на 4-е записи, как (db down или что-то еще) Я хочу откат предыдущих 3 записей, которые были вставлены из 7-го файла, возможно ли это?
Мой код здесь ..
protected override void OnStart(string[] args)
{
timer1 = new Timer();
this.timer1.Interval = 30000;
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_tick);
timer1.Enabled = true;
Upload.WriteErrorMessage("Service Started");
}
private void timer_tick(object sender,ElapsedEventArgs e)
{
timer1.Enabled = false;
SwiftParser.Parse();
timer1.Enabled = true;
}
protected override void OnStop()
{
timer1.Enabled = false;
Upload.WriteErrorMessage("service stoped");
}
метод, где я загрузки данных:
Upload obj = new Upload();
var files = db.SWIFT_FILES.Select(x => x.LASTFILENUMBER).Max();
int sFile = Convert.ToInt32(files);
int sf1 = sFile;
while (true)
{
string flName = @"D:\Projects\Recon\Nostro\swift\" + sFile.ToString("00000000").Trim() + ".swf";
if (System.IO.File.Exists(flName))
{
obj.SwiftParse(flName);
}
else
{
break;
}
sFile++;
}
В быстром разборе я просто разобрать файл и собрать из него данные и сохранить в базе данных это было на самом деле длинный метод, поэтому я не хочу делать беспорядок здесь
in short Я создаю объект таблицы и сохраняю в нем
for(int i=0; i<length of record; i ++)
{
SwiftTable sw = new SwiftTable();
sw.acc_no = from file i get acc no;
sw.amount= ......................;
sw.bank=.........................;
db.Add.SwiftTable(sw);
db.SaveChanges();
}
Пожалуйста, расскажите, какие обходные пути для этого или любые предложения помогут вам в полной мере. Я использую Oracle databse и C# windows service и Entity framework 5
Я получаю InvalidoperationException, говоря, что соединение не открывается. Любая идея? ваше решение выглядит хорошо @JanneP –
Извините, я отредактировал свой ответ, чтобы включить открытие соединения. – JanneP
Другим исключением является Dbcontext, который был удален –