Inquiridor
SSIS - Componente arquivo simples csv, linha nula

Pergunta
-
Boa tarde,
Estou precisando de ajuda em um caso.
Tenho uma origem oracle e um destino arquivo simples no formato csv.
Mas ao gerar o csv esta gerando a ultima linha vazia, estou usando o componente Script Task porém esta gastando o dobro do tempo para processar. Existe alguma outra forma que elimine a ultima linha vazia do csv?
Estou utilizando o Visual Studio 2017.
- Editado welder martins segunda-feira, 18 de janeiro de 2021 14:42 detalhes.
Todas as Respostas
-
welder,
Vou tentar lhe ajudar, em particular eu não tenho muitos conhecimentos no uso do Oracle!
Qual é a instrução define no componente Script Task?
Este arquivo .csv esta sendo armazenado no mesmo servidor Oracle, na rede ou na máquina que esta processamento este pacote?
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Olá Junior, blz?
Desculpe pela demora mas não recebi o alerta de resposta da pergunta.
A extração esta ocorrendo na mesma maquina, mas pelo que eu vi o script esta percorrendo linha a linha e verificando se existe linha vazia. Se existir uma forma de verificar a ultima linha fica mais rápido. Veja abaixo como esta definido o código.
Att,
Welder
#region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.IO; #endregion namespace ST_f83e2c1c4c4c45ac8a0353c3f382ede1 { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] classe pública parcial ScriptMain: Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { #endregion public void Main () { string filename = @ Dts.Variables ["User :: Arquivo"]. Value.ToString (); string fileinfo = ""; string curline = ""; TextReader tr = novo StreamReader (nome do arquivo); while ((curline = tr.ReadLine ())! = null) { curline = curline.Trim (); if (curline.Length> 0) fileinfo = fileinfo + curline; } tr.Close (); TextWriter tw = novo StreamWriter (nome do arquivo, falso); tw.Write (fileinfo); tw.Close (); Dts.TaskResult = (int) ScriptResults.Success; } #region ScriptResults declaração /// <summary> /// Este enum oferece um atalho conveniente dentro do escopo desta classe para definir o /// resultado do script. /// /// Este código foi gerado automaticamente. /// </summary> enum ScriptResults { Success = Microsoft . SqlServer . Dts . Runtime . DTSExecResult . Sucesso , Falha = Microsoft . SqlServer . Dts . Runtime . DTSExecResult .Falha }; #endregion } }
- Editado welder martins segunda-feira, 25 de janeiro de 2021 19:35 detalhes.
-
Welder,
Talvez uma alternativa seja contar a quantidade de linhas do arquivo assim que o mesmo é aberto, e a cada linha processada ir comparando com o número da linha total.
Sinceramente nesta parte do desenvolvimento em C#, foge do meu conhecimento.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]