none
Ler excel e salvar no banco de dados RRS feed

  • Pergunta

  • Olá Amigos!

    Estou tentando ler um arquivo .xlsx, obtido através de um FileUpload, e gravar seus dados em um banco de dados Oracle usando asp.net.

    Li diversas pessoas comentando sobre o uso do OleDB, porém não entendo o funcionamento e não sei dizer se esta é a solução para meu problema.

    Como devo fazer essa comunicação entre o FileUpload, o arquivo e o banco de dados?

    Existe uma forma de gravar apenas lendo, ou preciso salvar esse arquivo em um determinado local e em seguida ler e gravar?

    Obrigado!

    quinta-feira, 8 de setembro de 2016 19:27

Respostas

  • Olá,

    O interessante é gravar sim, você pode fazer dessa forma:

                Guid guid = Guid.NewGuid();
                string fileName = @"C:\temp\planilha_" + guid + ".xls";
                try
                {
                    if (!string.IsNullOrEmpty(DadosFileUpload.FileName))
                    {
                        using (var fileStream = File.Create(fileName))
                        {
                            DadosFileUpload.FileContent.CopyTo(fileStream);
                        }
                        string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; data source=" + fileName + "; Extended Properties=Excel 8.0;";
                        string selectString = "SELECT * FROM [NomePlanilha$]";
    
                        OleDbConnection con = new OleDbConnection(connectionString);
                        OleDbCommand cmd = new OleDbCommand(selectString, con);
                        try
                        {
                            con.Open();
                            OleDbDataReader odr = cmd.ExecuteReader();
                            DataTable dt = new DataTable();
                            dt.Load(odr);
    
                            foreach (DataRow dr in dt.Rows)
                            {
                                // AQUI VOCÊ TEM ACESSO AS COLUNAS DA LINHA EM QUESTÃO
                                // PODE ACESSAR DA SEGUINTE FORMA: dr["NomeColuna"]
                                // PODE REALIZAR A IMPORTAÇÃO LINHA A LINHA OU REALIZAR OUTRA TAREFA COMO ADICIONAR EM UM LIST PARA ADICIONAR NO FINAL DO LOOP
                            }
    
                        }
                        catch (Exception ex)
                        {
                            // ERRO
                        }
                        finally
                        {
                            con.Dispose();
                            File.Delete(fileName);
                        }
                    }
                }


    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 8 de setembro de 2016 20:34

Todas as Respostas

  • Olá,

    O interessante é gravar sim, você pode fazer dessa forma:

                Guid guid = Guid.NewGuid();
                string fileName = @"C:\temp\planilha_" + guid + ".xls";
                try
                {
                    if (!string.IsNullOrEmpty(DadosFileUpload.FileName))
                    {
                        using (var fileStream = File.Create(fileName))
                        {
                            DadosFileUpload.FileContent.CopyTo(fileStream);
                        }
                        string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; data source=" + fileName + "; Extended Properties=Excel 8.0;";
                        string selectString = "SELECT * FROM [NomePlanilha$]";
    
                        OleDbConnection con = new OleDbConnection(connectionString);
                        OleDbCommand cmd = new OleDbCommand(selectString, con);
                        try
                        {
                            con.Open();
                            OleDbDataReader odr = cmd.ExecuteReader();
                            DataTable dt = new DataTable();
                            dt.Load(odr);
    
                            foreach (DataRow dr in dt.Rows)
                            {
                                // AQUI VOCÊ TEM ACESSO AS COLUNAS DA LINHA EM QUESTÃO
                                // PODE ACESSAR DA SEGUINTE FORMA: dr["NomeColuna"]
                                // PODE REALIZAR A IMPORTAÇÃO LINHA A LINHA OU REALIZAR OUTRA TAREFA COMO ADICIONAR EM UM LIST PARA ADICIONAR NO FINAL DO LOOP
                            }
    
                        }
                        catch (Exception ex)
                        {
                            // ERRO
                        }
                        finally
                        {
                            con.Dispose();
                            File.Delete(fileName);
                        }
                    }
                }


    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 8 de setembro de 2016 20:34
  • Boa tarde,

    Devido a falta de resposta do usuário
    essa thread está sendo fechada.
    Se o problema ainda estiver ocorrendo,
    favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 12 de setembro de 2016 15:41
    Moderador