Usuário com melhor resposta
CSV com linq C#

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
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
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
-
-
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.
-
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" -
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
-
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 -
-
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.
-
-
Boa Tarde Antero
Agora esta com outro erro:
Erro de Servidor no Aplicativo '/'.
Valor não pode ser nulo.
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.
Nome do parâmetro: path
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 -
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" -
-
-
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 ControledeUsuariosColoquei dessa forma:
File.WriteAllText(".\", CSV.ToString());
-
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
-
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 -
-
-
Tenta assim (Com duas \\):
File.WriteAllText(".\\", CSV.ToString());
Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985
- Editado André de Mattos Ferraz 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.0Pode me ajudar ? Por favor ?
Obrigado.
-
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
-
-
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.
-
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
- Editado André de Mattos Ferraz 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.
-
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