Usuário com melhor resposta
Erro na importação de dados Excel para SQL Server em Vb.net

Pergunta
-
Boa tarde Pessoal,
Poderia me ajudar com o seguinte problema:
O erro apresentado é: Nenhuma mensagem de erro disponível, código de resultado: E_FAIL(0x80004005).
Isso ocorre quando seleciono uma planilha Excel (.xlsx) e clico para importar os dados.
A exception é apresentada na linha onde o dataadapter vai preencher o dataset
Segue o código para apreciação
Agradeço desde já
If fupImportaDados.HasFile Then CaminhoArquivo = fupImportaDados.PostedFile.FileName objDataSet = New DataSet ConexaoExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CaminhoArquivo & ";Extended Properties='Excel 12.0;HDR=YES;'" objDataAdapter = New OleDbDataAdapter("SELECT * FROM [BASE DE DADOS$]", ConexaoExcel) objDataAdapter.Fill(objDataSet) Dim objConexao As New SqlClient.SqlConnection(CONEXAO) Dim strSQL As String = "SPI_PAGAMENTOS" Dim objComando As New SqlClient.SqlCommand(strSQL, objConexao) objComando.CommandType = CommandType.StoredProcedure Try objConexao.Open() For Each dr As DataRow In objDataSet.Tables(0).Rows objComando.Parameters.Clear() objComando.Parameters.AddWithValue("@CD_LINHA", dr("TELEFONE/LINK")) objComando.Parameters.AddWithValue("@DS_TIPO", dr("TIPO")) objComando.Parameters.AddWithValue("@CD_CC", dr("CENTRO DE CUSTO")) objComando.Parameters.AddWithValue("@DS_CC", dr("DESCRIÇÃO")) objComando.Parameters.AddWithValue("@DS_DIRETORIA", dr("DIRETORIA")) objComando.Parameters.AddWithValue("@DS_GERENCIA", dr("GERÊNCIA")) objComando.Parameters.AddWithValue("@DS_COORDENACAO", dr("COORDENAÇÃO")) objComando.Parameters.AddWithValue("@DT_PERIODO", dr("MÊS E ANO")) objComando.Parameters.AddWithValue("@VL_PAGAMENTO", dr("PAGAMENTO")) objComando.Parameters.AddWithValue("@QTD_MINUTAGEM", dr("MINUTAGEM")) objComando.Parameters.AddWithValue("@DS_OPERADORA", dr("OPERADORA")) objComando.Parameters.AddWithValue("@DS_SERVICO", dr("SERVIÇO")) objComando.Parameters.AddWithValue("@DT_INCLUSAO", Convert.ToDateTime(Year(Now) & "-" & Month(Now) & "-" & Day(Now))) objComando.ExecuteNonQuery() Next ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Dados importados com sucesso.');", True) Catch ex As Exception ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Falha ao efetuar a importação de dados.\n\n Erro: " & ex.Message & "');", True) Finally objConexao.Close() objComando.Dispose() objDataAdapter.Dispose() objDataSet.Dispose() End Try End If
System.NullReferenceException - Object reference not set to an instance of an object
Respostas
-
Ops... olhando seu codigo.. eh que vc esta abrindo a conexao depois que esta executando o fill.... quando vc chama o fill.. ele busca pela conexao... ae ela nao existe.. ou esta fechada.. abre a conexao antes de dar o fill....
- Marcado como Resposta Bruno Venturoza quarta-feira, 7 de julho de 2010 11:30
Todas as Respostas
-
-
-
-
Porque dos lugares que encontrei documentação, acabei não entendendo muito bem. E também fiquei preocupado com a validação dos dados.
Mas eu até cheguei pesquisar qual seria a melhor maneira de importar esses dados, pois serão realizadas uma vez por mês. A forma que será feita a importação é indiferente.
System.NullReferenceException - Object reference not set to an instance of an object -
-
Vais usar desta forma:
INSERT INTO TUA_TABELA (TEUS CAMPOS) SELECT (CAMPOS DO EXCEL) FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml;HDR=YES;Database=D:\arquivo.xlsx;','SELECT * FROM [BASE DE DADOS$]');
msn: poseidonfba@hotmail.com -
E qual procedure de configuração eu preciso rodar para registro?
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.
System.NullReferenceException - Object reference not set to an instance of an object -
-
-
Seguinte, eu aqui na empresa uso desta forma, no próprio sql, a cada semana tenho que converter um excel de aproximadamente 50.000 linhas e desta forma é bem rápido, só que, uso Sistemas de 32bits, eu tinha previsto testar no Windows Server 2003 64bits mais gerou alguns problemas e por falta de tempo ainda não tive como voltar para este caso.
Ainda não testei no windows 7, até que apareça outra solução faz como vc estava fazendo mesmo e tenta fazer os passos dete link para mudar a tua aplicação para plataforma 32bits
msn: poseidonfba@hotmail.com -
-
-
Ops... olhando seu codigo.. eh que vc esta abrindo a conexao depois que esta executando o fill.... quando vc chama o fill.. ele busca pela conexao... ae ela nao existe.. ou esta fechada.. abre a conexao antes de dar o fill....
- Marcado como Resposta Bruno Venturoza quarta-feira, 7 de julho de 2010 11:30
-