Esempio n. 1
0
        public int Parse(string absolutePath, FileParseWriterSQL fileParseWriter)
        {
            try
            {
                using (c227_FileProcessorEntities context1 = new c227_FileProcessorEntities())
                {
                    context1.Set <ft_transaction>().AsNoTracking();
                    var            transactions = context1.ft_transaction.AsNoTracking().ToList();
                    ft_transaction transaction  = transactions.SingleOrDefault(x => x.TransactionId == 123);


                    if (transaction != null)
                    {
                        writeTable(absolutePath, fileParseWriter, transaction);
                    }
                    else
                    {
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(this.Id);
        }
Esempio n. 2
0
        private bool WriteMltRecordType(string absolutePath, string distribution, ft_transaction transaction)
        {
            bool result = false;

            string tableName = transaction.Description;
            List <frd_record_definition> columns = new List <frd_record_definition>();

            List <ftd_transaction_definition> transactionDefinitions = transaction.ftd_transaction_definition.OrderBy(t => t.Sequence).ToList();

            foreach (ftd_transaction_definition transactionDefinition in transactionDefinitions)
            {
                List <frd_record_definition> recordDefinitions = transactionDefinition.fr_record.frd_record_definition.OrderBy(r => r.Sequence).ToList();
                recordDefinitions.ForEach(r => columns.Add(r));
            }

            //version and/or create target table if required
            //validateTargetTable(tableName, false, DateTime.Now, columns);

            List <Dictionary <string, object> > rows = new List <Dictionary <string, object> >();
            Dictionary <string, object>         row  = new Dictionary <string, object>();

            //start SQL Transaction
            SqlConnection connection = dataAccess.GetConnection();

            connection.Open();
            SqlTransaction tran = connection.BeginTransaction();

            //blank or non-numeric distribution implies '01'
            if (distribution == string.Empty | !int.TryParse(distribution, out int d))
            {
                distribution = "01";
            }

            //distribution is defined as char(2)
            distribution = distribution.PadRight(2, ' ');

            //get all identifiers for this transaction
            List <string> identifiers = new List <string>();

            foreach (ftd_transaction_definition transactionDefinition in transactionDefinitions)
            {
                identifiers.Add(transactionDefinition.fr_record.Identifier);
            }

            List <Tuple <string, string, int, int?> > colDefs = new List <Tuple <string, string, int, int?> >();

            foreach (frd_record_definition column in columns)
            {
                colDefs.Add(new Tuple <string, string, int, int?>(column.Name, column.ed_element_definition.DataType, column.Length, column.DecimalPlaces));
            }
            dataAccess.CreateTable(tableName, colDefs, false, string.Empty);

            try
            {
                int size = (int)transaction.ftd_transaction_definition.FirstOrDefault().fr_record.RecordLength;
                using (StreamReader sr = new StreamReader(File.OpenRead(absolutePath), Encoding.UTF8, false, size))
                {
                    //calculate number of records to read
                    //int recordCount = 0;
                    //long fileLength = sr.BaseStream.Length;
                    //int totalHeaderSize = (transaction.HeaderLength ?? 0) * (transaction.HeaderCount ?? 1);
                    //int totalTrailerSize = (transaction.TrailerLength ?? 0) * (transaction.TrailerCount ?? 1);

                    //long recordBytes = fileLength - (totalHeaderSize + totalTrailerSize);
                    //if (recordBytes > 0)
                    //{
                    //    recordCount = (int)Math.Ceiling((double)recordBytes / size);
                    //}

                    //bool hasTrailer = totalTrailerSize != 0;
                    int    recordLine    = 1;
                    string rowIdentifier = string.Empty;

                    //skip header
                    //readNext(sr, totalHeaderSize);

                    //for (int x = 0; x < recordCount; x++)
                    //{
                    string line = string.Empty;
                    while ((line = sr.ReadLine()) != null)
                    {
                        //size = (x == recordCount-1) ? size-2 : size;

                        //string recordString = readNext(sr, size);
                        //if (recordString.Length != size)
                        //{
                        //    break;
                        //}

                        //string lineIdentifier = GetMltIdentifier(recordString, identifiers);
                        string lineIdentifier = GetMltIdentifier(line, identifiers);
                        if (string.IsNullOrEmpty(lineIdentifier))
                        {
                            recordLine++;
                        }
                        else
                        {
                            rowIdentifier = lineIdentifier;
                            recordLine    = 1;
                        }

                        ftd_transaction_definition transDef = transactionDefinitions.Where(t => t.fr_record.Identifier == rowIdentifier).FirstOrDefault();
                        if (transDef != null)
                        {
                            fr_record record = transDef.fr_record;

                            //check for new transaction
                            if (rowIdentifier == identifiers[0] && row.Keys.Count > 0)
                            {
                                rows.Add(row);
                                row = new Dictionary <string, object>();
                            }

                            //Dictionary<string, object> rowValues = GetMltRowValues(recordString, record, recordLine);
                            Dictionary <string, object> rowValues = GetMltRowValues(line, record, recordLine);
                            foreach (KeyValuePair <string, object> rowValue in rowValues)
                            {
                                row.Add(rowValue.Key, rowValue.Value);
                            }
                        }

                        if (rows.Count == 20)
                        {
                            dataAccess.InsertDynamicWithColumns(connection, tran, tableName, 0, distribution, rows, columns.Select(c => c.Name).ToList());
                            rows.Clear();
                        }
                    }
                }

                if (row.Keys.Count > 0)
                {
                    rows.Add(row);
                }
                if (rows.Count > 0)
                {
                    dataAccess.InsertDynamicWithColumns(connection, tran, tableName, 0, distribution, rows, columns.Select(c => c.Name).ToList());
                }

                tran.Commit();
                result = true;
            }

            catch (Exception ex)
            {
                tran.Rollback();
            }
            finally
            {
                connection.Close();
            }

            return(result);
        }
Esempio n. 3
0
        //private void validateTargetTable(string tableName, bool xmlFile, DateTime fileDefLastUpdated, List<frd_record_definition> columns)
        //{
        //    //version table if file def changed since the table was created
        //    if (dataAccess.TableExists(tableName))
        //    {
        //        //get table created date and compare to definition changed date
        //        DateTime tableCreatedDate = dataAccess.GetTableCreatedDate(tableName);
        //        Logger.GetLogger().WriteDebug($"Table:'{tableName}' created:{tableCreatedDate.ToString("dd/MM/yyyy hh:mm")} definition last changed:{fileDefLastUpdated.ToString("dd/MM/yyyy hh:mm")}");

        //        if (tableCreatedDate <= fileDefLastUpdated)
        //        {
        //            dataAccess.VersionTable(tableName, xmlFile);
        //        }
        //    }

        //    //re-check because table may have been versioned - create table if does not exist
        //    if (!dataAccess.TableExists(tableName))
        //    {
        //        createTable(tableName, xmlFile, columns, dataAccess);
        //    }
        //}


        private bool WriteMultiRecordType(string absolutePath, Encoding encoding, string distribution, ft_transaction transaction)
        {
            bool result = false;

            //handle multi line tagged file
            if (string.Equals(transaction.ftd_transaction_definition.FirstOrDefault().fr_record.Template, "mlt", StringComparison.OrdinalIgnoreCase))
            {
                result = WriteMltRecordType(absolutePath, string.Empty, transaction);
            }
            else
            {
                throw new NotImplementedException("Multi-transactioned based files not implemented yet.");
            }
            return(result);
        }
Esempio n. 4
0
 public bool WriteToStore(string absolutePath, ft_transaction transaction)
 {
     //multi record file
     return(WriteMultiRecordType(absolutePath, Encoding.UTF8, string.Empty, transaction));
 }
Esempio n. 5
0
 private void writeTable(string absolutePath, FileParseWriterSQL fileParseWriter, ft_transaction transaction)
 {
     //write to the store
     if (!fileParseWriter.WriteToStore(absolutePath, transaction))
     {
     }
 }