public void Parse(DateTime batchTime, TextReader reader, StudentRecordsHeader header) { Console.WriteLine($"Filename: {header.Filename}"); Console.WriteLine($"Batch time: {batchTime}"); var csvReader = new CsvReader(reader); csvReader.Configuration.RegisterClassMap <StudentRecordClassMap>(); Console.WriteLine("Reading records..."); var count = 0; var records = new List <StudentRecord>(); try { foreach (var record in csvReader.GetRecords <StudentRecord>()) { record.LastUpdated = batchTime; records.Add(record); count++; if (count % 1000 == 0) { Console.WriteLine($"Read {count} records."); } } } catch (Exception e) { Console.WriteLine($"{e}"); } header.Records = records; Console.WriteLine($"Reading records done ({count})!"); return; }
private static void HandleFileChange(object source, FileSystemEventArgs e) { try { _processing.WaitOne(); _context = new PacBillContext(new DbContextOptionsBuilder <PacBillContext>(). UseSqlServer(_connectionString).Options); using (var tx = _context.Database.BeginTransaction()) { string scope; if (IsRecon(e.Name)) { scope = GetReconScope(); } else { scope = GetMonthlyScope(_context); } Console.WriteLine($"Scope: {scope}"); var header = _context.StudentRecordsHeaders.Include(r => r.Records).SingleOrDefault(h => h.Scope == scope); if (header != null) { if (!header.Locked) { Console.WriteLine($"Data for {scope} exists and is not locked. Overwriting."); _context.Remove(header); } else { Console.WriteLine($"Data for {scope} exists and is locked. Aborting import."); return; } } else { header = new StudentRecordsHeader { Scope = scope, Filename = e.Name, Created = DateTime.Now, Locked = false, }; } try { using (var streamReader = File.OpenText(e.FullPath)) { var lastWrite = File.GetLastWriteTime(e.FullPath); _parser.Parse(lastWrite, streamReader, header); } } catch (Exception ex) { Console.WriteLine($"Failed to read CSV: {ex.Message}."); if (ex.InnerException != null) { Console.WriteLine($" Inner exception: {ex.InnerException.Message}."); } return; } try { Console.WriteLine("Writing changes to the database..."); if (header.Id == 0) { _context.Add(header); } else { _context.Update(header); } _context.SaveChanges(); Console.WriteLine("Writing changes to the database done!"); tx.Commit(); } catch (Exception ex) { Console.WriteLine($"Failed to write data to database: {ex.Message}."); if (ex.InnerException != null) { Console.WriteLine($" Inner exception: {ex.InnerException.Message}."); } return; } } } finally { _processing.Set(); } }
public void Parse(TextReader reader, StudentRecordsHeader header) => Parse(DateTime.Now, reader, header);