コード例 #1
0
        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;
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
 public void Parse(TextReader reader, StudentRecordsHeader header)
 => Parse(DateTime.Now, reader, header);