コード例 #1
0
        /// <summary>
        ///		Carga una sentencia para exportar CSV
        /// </summary>
        private SentenceBase LoadSentenceExportCsv(MLNode rootML)
        {
            SentenceExportCsv sentence = new SentenceExportCsv();

            // Asigna las propiedades
            sentence.Source    = rootML.Attributes[TagSource].Value;
            sentence.FileName  = rootML.Attributes[TagFileName].Value;
            sentence.BatchSize = rootML.Attributes[TagBatchSize].Value.GetInt(BatchSizeDefault);
            sentence.Command   = GetProviderCommand(rootML, TagLoad);
            // Carga la definición
            LoadDefinitionCsv(sentence.Definition, rootML);
            // Devuelve la sentencia
            return(sentence);
        }
コード例 #2
0
        /// <summary>
        ///		Crea una sentencia de exportación a CSV con los datos de la tabla
        /// </summary>
        private SentenceExportCsv CreateSentence(SentenceExportCsvSchema sentence, TableDbModel table)
        {
            SentenceExportCsv exportSentence = new SentenceExportCsv();

            // Asigna las propiedades
            exportSentence.Source    = sentence.Source;
            exportSentence.FileName  = table.Name + ".csv";
            exportSentence.Command   = GetSelect(table);
            exportSentence.BatchSize = sentence.BatchSize;
            exportSentence.Timeout   = sentence.Timeout;
            // Asigna los parámetros de archivo
            exportSentence.Definition = sentence.Definition;
            // Devuelve la sentencia de exportación
            return(exportSentence);
        }
コード例 #3
0
        /// <summary>
        ///		Procesa una exportación de una consulta a CSV
        /// </summary>
        internal bool Execute(SentenceExportCsv sentence)
        {
            bool   exported = false;
            string fileName = Processor.Manager.Step.Project.GetFullFileName(sentence.FileName);

            // Exporta los datos
            using (BlockLogModel block = Processor.Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Start exporting to '{fileName}'"))
            {
                if (string.IsNullOrWhiteSpace(sentence.Command.Sql))
                {
                    block.Error("There is not command at export sentence");
                }
                else
                {
                    ProviderModel provider = Processor.GetProvider(sentence.Source);

                    if (provider == null)
                    {
                        block.Error($"Can't find the provider. Key: '{sentence.Source}'");
                    }
                    else
                    {
                        CommandModel command = Processor.ConvertProviderCommand(sentence.Command, out string error);

                        if (!string.IsNullOrWhiteSpace(error))
                        {
                            block.Error($"Error when convert export command. {error}");
                        }
                        else
                        {
                            try
                            {
                                // Exporta los datos
                                Export(fileName, provider, command, sentence, block);
                                // Indica que se ha exportado correctamente
                                exported = true;
                            }
                            catch (Exception exception)
                            {
                                block.Error($"Error when export to '{fileName}'", exception);
                            }
                        }
                    }
                }
            }
            // Devuelve el valor que indica si se ha exportado correctamente
            return(exported);
        }
コード例 #4
0
        /// <summary>
        ///		Exporta los datos de un comando
        /// </summary>
        private void Export(string fileName, ProviderModel provider, CommandModel command, SentenceExportCsv sentence, BlockLogModel block)
        {
            using (IDataReader reader = provider.OpenReader(command, sentence.Timeout))
            {
                long records = 0;

                // Escribe en el archivo
                using (CsvWriter writer = new CsvWriter(sentence.Definition))
                {
                    List <ColumnModel> columns = GetColumns(reader);

                    // Crea el directorio del archivo
                    LibHelper.Files.HelperFiles.MakePath(System.IO.Path.GetDirectoryName(fileName));
                    // Abre el archivo
                    writer.Open(fileName);
                    // Añade las cabeceras
                    writer.WriteHeaders(GetHeaders(columns, sentence.Definition.TypedHeader));
                    // Graba las líneas
                    while (reader.Read())
                    {
                        // Graba los valores
                        writer.WriteRow(GetValues(columns, reader));
                        // Lanza el evento de progreso
                        if (++records % sentence.BatchSize == 0)
                        {
                            block.Progress($"Copying {records:#,##0}", records, 0);
                        }
                    }
                    // Log
                    block.Info($"Exported {records:#,##0} records");
                }
            }
        }