예제 #1
0
        /// <summary>
        ///		Importa los datos del archivo sobre el proveedor
        /// </summary>
        private void Import(ProviderModel provider, SentenceImportCsv sentence, string fileName, BlockLogModel block)
        {
            long records = 0;

            // Copia del origen al destino
            using (CsvReader reader = new CsvReader(fileName, sentence.Definition, sentence.Columns, sentence.BatchSize))
            {
                // Asigna el manejador de eventos
                reader.ReadBlock += (sender, args) => block.Progress("Importing", args.Records, 0);
                // Copia los datos del archivo sobre la tabla
                records = provider.BulkCopy(reader, sentence.Table, sentence.Mappings, sentence.BatchSize, sentence.Timeout);
            }
            // Log
            block.Info($"Imported {records:#,##0} records");
        }
        /// <summary>
        ///		Crea una sentencia de importación de una tabla con los datos de un archivo
        /// </summary>
        private SentenceImportCsv CreateSentence(SentenceImportCsvSchema sentence, TableDbModel table)
        {
            SentenceImportCsv importSentence = new SentenceImportCsv();

            // Asigna las propiedades
            importSentence.Target    = sentence.Target;
            importSentence.FileName  = table.Name + ".csv";
            importSentence.Table     = table.Name;
            importSentence.BatchSize = sentence.BatchSize;
            importSentence.Timeout   = sentence.Timeout;
            // Asigna los parámetros de archivo
            importSentence.Definition = sentence.Definition;
            // Devuelve la sentencia de importación
            return(importSentence);
        }
예제 #3
0
        /// <summary>
        ///		Carga una sentencia para importar CSV
        /// </summary>
        private SentenceBase LoadSentenceImportCsv(MLNode rootML)
        {
            SentenceImportCsv sentence = new SentenceImportCsv();

            // Asigna las propiedades
            sentence.Target    = rootML.Attributes[TagTarget].Value;
            sentence.FileName  = rootML.Attributes[TagFileName].Value;
            sentence.Table     = rootML.Attributes[TagTable].Value;
            sentence.BatchSize = rootML.Attributes[TagBatchSize].Value.GetInt(BatchSizeDefault);
            sentence.Timeout   = GetTimeout(rootML, TimeSpan.FromHours(2));
            // Carga la definición
            LoadDefinitionCsv(sentence.Definition, rootML);
            // Carga los mapeos
            LoadMappings(sentence.Mappings, rootML);
            sentence.Columns.AddRange(LoadColumnsCsv(rootML));
            // Devuelve la sentencia
            return(sentence);
        }
예제 #4
0
        /// <summary>
        ///		Procesa una importación de un archivo
        /// </summary>
        internal bool Execute(SentenceImportCsv sentence)
        {
            bool imported = false;

            // Recoge los datos necesarios e importa el archivo
            using (BlockLogModel block = Processor.Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Start import CSV {sentence.FileName}"))
            {
                ProviderModel provider = Processor.GetProvider(sentence.Target);

                // Ejecuta el comando
                if (provider == null)
                {
                    block.Error($"Can't find the provider. Key: '{sentence.Target}'");
                }
                else
                {
                    string fileName = Processor.Manager.Step.Project.GetFullFileName(sentence.FileName);

                    if (!System.IO.File.Exists(fileName))
                    {
                        block.Error($"Cant find the file '{fileName}'");
                    }
                    else
                    {
                        try
                        {
                            // Importa el archivo
                            Import(provider, sentence, fileName, block);
                            // Indica que se ha ejecutado correctamente
                            imported = true;
                        }
                        catch (Exception exception)
                        {
                            block.Error($"Error when import CSV '{fileName}'", exception);
                        }
                    }
                }
            }
            // Devuelve el valor que indica si se ha importado
            return(imported);
        }