none
CSV com linq C# RRS feed

  • Pergunta

  • protected void btnSearch_Click(object sender, EventArgs e)
            {
                this.populate();
            }
            private void populate(int pIndex = -1)
            {
                mdc = new ModelDataContext();

                var sourceUsuariosCNA = (from cna in mdc.CNAs
                                         select new object[] 
                                      { 
                                      cna.NOME.ToString(),
                                      cna.CARGO.ToString(),
                                      cna.CARGO_EN.ToString(),
                                      cna.TELEFONE.ToString(),
                                      cna.EMAIL.ToString(),
                                      cna.LOJA.ToString(),
                                      cna.ENDERECO.ToString(),
                                      cna.BAIRRO.ToString(),
                                      cna.CEP.ToString(),
                                      cna.CIDADE.ToString(),
                                      }).ToList();

                var CSV = new StringBuilder();

                sourceUsuariosCNA.ForEach(line =>
                    {
                        CSV.AppendLine(string.Join(",", line));

                    });

                File.WriteAllText(filePath, CSV.ToString());

            }


            public string filePath { get; set; }

    Porem esta dando esse erro:

    Erro de Servidor no Aplicativo '/'.

    O método ou a operação não está implementada.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.NotImplementedException: O método ou a operação não está implementada.

    Erro de Origem: 
    Linha 10:         internal void AppendLine(string p)
    Linha 11:         {
    Linha 12:             throw new NotImplementedException();
    Linha 13:         }
    Linha 14:     }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\StringBuider.cs    Linha: 12 

    Rastreamento de Pilha: 
    [NotImplementedException: O método ou a operação não está implementada.]
       ControledeUsuarios.StringBuider.AppendLine(String p) in c:\ARTSIM\SGSIM\ControledeUsuarios\StringBuider.cs:12
       ControledeUsuarios.<>c__DisplayClass1.<populate>b__0(Object[] line) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:61
       System.Collections.Generic.List`1.ForEach(Action`1 action) +11450042
       ControledeUsuarios.CNA.populate(Int32 pIndex) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:59
       ControledeUsuarios.CNA.btnSearch_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:36
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9690930
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1038.0
    terça-feira, 1 de março de 2016 19:00

Respostas

  • Vc viu o exemplo??? Vc precisa colocar o nome do arquivo:

    File.WriteAllText(@"c:\temp\seuarquivo.txt", CSV.ToString());


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    • Marcado como Resposta Ricardo-ti2016 quinta-feira, 3 de março de 2016 18:00
    quinta-feira, 3 de março de 2016 14:15

Todas as Respostas

  • Como gerar um arquivo csv usando o linq com C# da minha tabela do sql server 2012 ?

    Tenho o codigo abaixo que uso para selecionar o dados da minha tabela

    sourceClientes = (from cli in mdc.CLIENTES
                                         join CT in mdc.CONTATOS on cli.CODIGO equals CT.CLIENTE
                                         where
                                         CT.EMAIL != ""
                                         orderby CT.EMAIL
                                         select new { cli.CODIGO, cli.RAZAO, CT.EMAIL }).Distinct();

    Neste caso eu preciso gerar o arquivo CSV com os dados

    cli.CODIDO, CLI.RAZAO, CLI.EMAIL

    Neste caso vai ter varios registros

    Alguem pode me ajudar ?

    Obrigado

    • Tipo Alterado Marcos SJ terça-feira, 23 de fevereiro de 2016 16:40 Threads de "How to" serão modificadas para discussão geral
    • Mesclado Marcos SJ terça-feira, 1 de março de 2016 20:43 Duplicada
    terça-feira, 23 de fevereiro de 2016 14:15
  • Ricardo,

    Este post do codeproject responde sua questão:

    LINQ to CSV library

    Att,


    Antero Marques

    terça-feira, 23 de fevereiro de 2016 14:22
  • Bom dia Antero

    Eu li o post que você enviou

    De fato tem tudo de linq com csv. 

    Porem é uma biblioteca de códigos com diversos exemplos. Os quais eu me perdi completamente em como começar a usar.

    Eu quero algo bem simples.

    Eu já tenho o banco de dados aberto conforme meu codigo.

    Eu só preciso criar o arquivo.csv

    abrir esse arquivo e colocar os dados da minha tabela

    E mais nada.

    Eu acredito que seja simples.

    Se alguém pude me ajudar eu gradeço muito.

    Fico no aguardo.

    Obrigado.

    terça-feira, 23 de fevereiro de 2016 15:07
  • Amigo,

    Tente o código abaixo, utilizo ele no meu sistema sem problema, segue:

    var csv = string.Join(",", banco.Where(q => q.campo1 == 1).Select(s => new { t1 = s.campo1.ToString(), t2 = s.campo2.ToString(), t3 = s.campo3.ToString() }));
    

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    terça-feira, 23 de fevereiro de 2016 16:18
  • Entendo Ricardo.

    Veja se este código te ajuda:

    var allLines = (from trade in proposedTrades
                    select new object[] 
                    { 
                        trade.TradeType.ToString(), 
                        trade.AccountReference, 
                        trade.SecurityCodeType.ToString(), 
                        trade.SecurityCode, 
                        trade.ClientReference, 
                        trade.TradeCurrency, 
                        trade.AmountDenomination.ToString(), 
                        trade.Amount, 
                        trade.Units, 
                        trade.Percentage, 
                        trade.SettlementCurrency, 
                        trade.FOP, 
                        trade.ClientSettlementAccount, 
                        string.Format("\"{0}\"", trade.Notes),                             
                    }).ToList();
    
    var csv = new StringBuilder();
    allLines.ForEach(line => 
    {
        csv.AppendLine(string.Join(",", line));            
    });
    
    File.WriteAllText(filePath, csv.ToString());
    Acho que é mais simples.


    Antero Marques

    terça-feira, 23 de fevereiro de 2016 16:19
  • Boa Tarde

    Obrigado por responder

    Coloquei da forma que você postou mudando apenas para os dados da minha tabela

                

    protected void btnSearch_Click(object sender, EventArgs e)
            {
                this.populate();
            }
            private void populate(int pIndex = -1)
            {
                mdc = new ModelDataContext();

                var sourceUsuariosCNA = (from cna in mdc.CNAs
                                         select new object[] 
                                      { 
                                      cna.NOME.ToString(),
                                      cna.CARGO.ToString(),
                                      cna.CARGO_EN.ToString(),
                                      cna.TELEFONE.ToString(),
                                      cna.EMAIL.ToString(),
                                      cna.LOJA.ToString(),
                                      cna.ENDERECO.ToString(),
                                      cna.BAIRRO.ToString(),
                                      cna.CEP.ToString(),
                                      cna.CIDADE.ToString(),
                                      }).ToList();

                var CSV = new StringBuider();

                sourceUsuariosCNA.ForEach(line =>
                    {
                        CSV.AppendLine(string.Join(",", line));

                    });

                File.WriteAllText(filePath, CSV.ToString());

            }


            public string filePath { get; set; }

    Porem esta dando esse erro:

    Erro de Servidor no Aplicativo '/'.

    O método ou a operação não está implementada.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.NotImplementedException: O método ou a operação não está implementada.

    Erro de Origem: 
    Linha 10:         internal void AppendLine(string p)
    Linha 11:         {
    Linha 12:             throw new NotImplementedException();
    Linha 13:         }
    Linha 14:     }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\StringBuider.cs    Linha: 12 

    Rastreamento de Pilha: 
    [NotImplementedException: O método ou a operação não está implementada.]
       ControledeUsuarios.StringBuider.AppendLine(String p) in c:\ARTSIM\SGSIM\ControledeUsuarios\StringBuider.cs:12
       ControledeUsuarios.<>c__DisplayClass1.<populate>b__0(Object[] line) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:61
       System.Collections.Generic.List`1.ForEach(Action`1 action) +11450042
       ControledeUsuarios.CNA.populate(Int32 pIndex) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:59
       ControledeUsuarios.CNA.btnSearch_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:36
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9690930
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1038.0
    terça-feira, 23 de fevereiro de 2016 18:56
  • Você viu o código do Lucas ?

    Antero Marques

    terça-feira, 23 de fevereiro de 2016 19:11
  • Vi sim o código do Lucas

    Porem eu não entendi.

    Segui o seu código só trocando os campos e tabela de acordo com a minha necessidade.

    Porem não reconheceu algumas linhas de códigos as quais eu tive que gerar classe

    As quais deram o erro acima.

    Se alguém puder me ajudar eu agradeço muito

    Obrigado.

    terça-feira, 23 de fevereiro de 2016 19:19
  • Ricardo,

    Está faltando o L de StringBuilder:

    var CSV = new StringBuilder();

    Att,


    Antero Marques

    quarta-feira, 24 de fevereiro de 2016 12:03
  • Boa Tarde Antero

    Agora esta com outro erro:

    Erro de Servidor no Aplicativo '/'.

    Valor não pode ser nulo.
    Nome do parâmetro: path

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.ArgumentNullException: Valor não pode ser nulo.
    Nome do parâmetro: path

    Erro de Origem: 
    Linha 64:                 });
    Linha 65: 
    Linha 66:             File.WriteAllText(filePath, CSV.ToString());
    Linha 67:             
    Linha 68:         }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs    Linha: 66 

    Rastreamento de Pilha: 
    [ArgumentNullException: Valor não pode ser nulo.
    Nome do parâmetro: path]
       System.IO.File.WriteAllText(String path, String contents) +4654961
       ControledeUsuarios.CNA.populate(Int32 pIndex) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:66
       ControledeUsuarios.CNA.btnSearch_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:37
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9690930
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1038.0

    quarta-feira, 24 de fevereiro de 2016 16:37
  • Amigo,

    Sua variável "filepath" está vazia, tente colocar pelo menos um ".\", dessa forma o arquivo será gravado na mesma pasta da aplicação.

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    quarta-feira, 24 de fevereiro de 2016 18:33
  • Boa Tarde Lucas

    Como fica então ?

    File.WriteAllText(filePath, CSV.ToString());

    Fico no aguardo

    Obrigado.

    quinta-feira, 25 de fevereiro de 2016 17:41
  • Basta colocar isto:

    File.WriteAllText(".\", CSV.ToString());


    Antero Marques

    quinta-feira, 25 de fevereiro de 2016 17:48
  • Error 4 Newline in constant C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 31 ControledeUsuarios
    Error 5 ; expected C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 53 ControledeUsuarios
    Error 6 ) expected C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 53 ControledeUsuarios

    Coloquei dessa forma:

    File.WriteAllText(".\", CSV.ToString());

    sexta-feira, 26 de fevereiro de 2016 19:55
  • Vc criou uma classe StringBuilder?

    ControledeUsuarios.StringBuider.AppendLine

    Você deveria usar "System.Text.StringBuilder" ou senao implementar esse método "AppendLine(string p)" nessa sua classe.


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    terça-feira, 1 de março de 2016 19:14
  • Olá André

    Estou usando a classe System.Text.StringBuilder

    Porem o erro esta na linha

    File.WriteAllText(".\", CSV.ToString());

    Error 4  Newline in constant C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 31  ControledeUsuarios
    Error 5  ; expected C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 53  ControledeUsuarios
    Error 6  ) expected C:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs 67 53  ControledeUsuarios

    quarta-feira, 2 de março de 2016 16:44
  • Está parecendo erro de compilador, algum erro léxico ou sintático. Poderia mandar um print para ficar mais fácil.

    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quarta-feira, 2 de março de 2016 16:49
  • Olá André

    Segue o print com o erro:

    quarta-feira, 2 de março de 2016 20:17
  • Tenta assim (Com duas \\):

    File.WriteAllText(".\\", CSV.ToString());


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985


    quarta-feira, 2 de março de 2016 20:25
  • Bom dia André

    Coloquei da forma que você postou acima porem apareceu outro erro:

    Erro de Servidor no Aplicativo '/'.

    Não foi possível localizar uma parte do caminho 'C:\Program Files (x86)\IIS Express\'.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.IO.DirectoryNotFoundException: Não foi possível localizar uma parte do caminho 'C:\Program Files (x86)\IIS Express\'.

    Erro de Origem: 
    Linha 60:                 });
    Linha 61: 
    Linha 62:             File.WriteAllText(".\\", CSV.ToString());
    Linha 63:             
    Linha 64:         }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs    Linha: 62 

    Rastreamento de Pilha: 
    [DirectoryNotFoundException: Não foi possível localizar uma parte do caminho 'C:\Program Files (x86)\IIS Express\'.]
       System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +353
       System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1326
       System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +66
       System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) +73
       System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) +73
       System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost) +64
       System.IO.File.WriteAllText(String path, String contents) +43
       ControledeUsuarios.CNA.populate(Int32 pIndex) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:62
       ControledeUsuarios.CNA.btnSearch_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs:33
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9690930
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1038.0

    Pode me ajudar ? Por favor ?

    Obrigado.

    quinta-feira, 3 de março de 2016 12:09
  • O erro é simples,

    "System.IO.DirectoryNotFoundException: Não foi possível localizar uma parte do caminho 'C:\Program Files (x86)\IIS Express\"

    Ele ta tentando gravar o arquivo nessa pasta, porém ela nao existe...


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    quinta-feira, 3 de março de 2016 12:11
  • André,

    essa questão ele já foi respondida em outro tópico.

    O problema foi que ele abriu mais de um tópico com a mesma questão.

    Att,


    Antero Marques

    quinta-feira, 3 de março de 2016 12:50
  • Bom dia André

    Eu abri outro tópico porque não foi respondido corretamente pois o mesmo continuou com erro.

    Estou apenas com esse tópico agora para poder resolver esse problema e conto com a ajuda de vocês.

    Como eu faço então para colocar o caminho

    "C:\temp\saida\" ?

    Fico no aguardo

    Obrigado pela ajuda.

    Fique com Deus.

    quinta-feira, 3 de março de 2016 13:38
  • Assim:

    File.WriteAllText("seu path aqui", CSV.ToString());

    veja aqui um exemplo:

    https://msdn.microsoft.com/pt-br/library/ms143375(v=vs.110).aspx


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985



    quinta-feira, 3 de março de 2016 13:42
  • André

    Tentei dessa forma conforme seu post, mas deu erro:

    Erro de Servidor no Aplicativo '/'.

    A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.IO.IOException: A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta.


    Erro de Origem: 
    Linha 60:                 });
    Linha 61: 
    Linha 62:             File.WriteAllText(@"c:\temp\", CSV.ToString());
    Linha 63:             
    Linha 64:         }

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\CNA.aspx.cs    Linha: 62 

    Rastreamento de Pilha: 
    [IOException: A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta.

    quinta-feira, 3 de março de 2016 14:14
  • Vc viu o exemplo??? Vc precisa colocar o nome do arquivo:

    File.WriteAllText(@"c:\temp\seuarquivo.txt", CSV.ToString());


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    • Marcado como Resposta Ricardo-ti2016 quinta-feira, 3 de março de 2016 18:00
    quinta-feira, 3 de março de 2016 14:15