Visual Basic.NET - Como importar datos de hoja de calculo excel a una BD sql

   
Vista:

Como importar datos de hoja de calculo excel a una BD sql

Publicado por Carlos carlosbermejor@hotmail.com (19 intervenciones) el 17/05/2013 19:06:47
Hola foro, ¿que tal?

Pues les venia con esta duda:
- Tengo un proyecto en vb.net (usando visual studio 2010 para mas informacion), que usa una base de datos enorme (1GB de datos, para mi eso es enoooorme) en mysql. Pues lo que hace la aplicaion es "importar" los datos de la hoja de calculos y ponerlos en una tabla.

Tonto no soy (por ahora, jaja, el día de mañana no se que será de mí) asi que he hecho que los campos de la tabla de la base de datos coincida con los nombres de los campos en la hoja de calculo (mas que nada para que coincida).

Bueno, pues mi duda es: ¿como hago yo para que mediante un metodo en vb.net la tabla de la base de datos coja los datos de la hoja de calculo excel?

Les dejo un poco de mi codigo para que asi puedan orientarse mejor (y poder ayudarme con más eficiencia, como no, una imagen vale mas que mil palabras).

Antes de nada unas premisas: tengo una clase vb que realiza la conexion a la base de daatos y otra que realiza los metodos pertinentes para controlarla etc, resumiendo, que el control de la BD esta echo, lo que necesito saber es como (que codigo sql y añadidos de vb.net necesarios para su funcionamiento) importar estos datos.

'El objeto objHojita es para controlar la clase de control BD
'Importar es el metodo que se encargara de importar los datos (por lo visto no me dara un derrame cerebral inventando nombres, eh?), y lo que hago es pasarle la ruta del archivo excel por un textbox, una tabla que contendra datos de forma temporal ("Altas") y una tabla que contendra los datos de forma mas permanente ("TAltas").

objHojita.Importar(txtRutaArchivo.Text, "Altas", "TAltas")

'Y la clase de control de BD, el metodo de importacion es este:


Sub Importar(ByVal excel, ByVal hoja, ByVal destino)

Try
'MyBase es el objeto para la conexion en profundo con la BD (trankis, funciona de maravilla)
MyBase.AbrirConexion()
Àqui empieza lo gordo. Esta linea de debajo, la variable connect, se supone que deberia contener la ruta del archivo y algo mas (no se el que, pero me han dicho que lo ponga asi, la ruta mas lo otro)
Connect = "'" + excel + "' 'Excel 8.0;HDR=Yes;IMEX=1;'"
'Y esta linea en un principio lo que hace es que pilla los datos, los mete en la tabla "destino" ("TAltas"), y luego copia los datos de la tabla destino en la tabla hoja ("Altas"). El caso es que falla.
MyBase.IniciarComando("INSERT INTO `" + hoja + "` SELECT * FROM `" + destino + "` IN `" + Connect + "`")
MyBase.InicioTransaccion()
MyBase.EjecutarComandoTR()
MyBase.AceptarTrasancion()
Catch ex As Exception
MessageBox.Show(ex.Message)
MyBase.RechazarTrasancion()
End Try
MyBase.CerrarConexion()
End Sub

Vale, asi lo he intentado hacer. Solucion que propongo: importar los datos de la hoja de calculo a la tabla destino ("TAltas") y luego ya si eso los copio en la otra.

En definitiva: no funciona como yo lo hago.
Asi que: ¿como hago para importar los datos de un excel a una tabla BD?

Solo necesito la sintaxis, llevarlo a .net ya me encargo yo.
Y lo siento si molesto a alguien poniendo este tema en esta zona del foro, es uqe no sabia si ponerlo en vb.net o en la zona sql.

Muchas gracias por su presencia y por sus aportaciones.

Por cualquier duda cosultadme aqui en el foro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como importar datos de hoja de calculo excel a una BD sql

Publicado por Carlos carlosbermejor@hotmail.com (19 intervenciones) el 22/05/2013 13:03:27
Señores, tengo malas noticias.

No funciona simplemente por que vb.net no le gusta los select into (motivo tonto pero cierto).

Asi que esta seria la solucion perfecta (si alguien supiera como hacerlo): utilizando ado.net en vb.net pasar los datos de un excel (el cual tiene varias hojas) a un access.

Ya se que la "solucion" parece mas una pregunta que una respuesta. Normal, es que en realidad es una pregunta (jaja).

Asi que hai va la pregunta, esta ves hecha como es debido:

¿Como se pueden pasar datos de un excel (xls) de varias paginas a un access (mdb) en vb.net utilizando ado.net?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos Javier Medina m

Como importar datos de hoja de calculo excel a una BD sql

Publicado por Carlos Javier Medina m (31 intervenciones) el 22/05/2013 22:56:01
Yo te paso hoy por la noche el modelo que tengo desarrollado para hacer esto.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos Javier Medina m

Como importar datos de hoja de calculo excel a una BD sql

Publicado por Carlos Javier Medina m (31 intervenciones) el 23/05/2013 11:40:00
Hola
Para que te funcione este modelo, debes tener es lo siguiente:
formulario con un nombre (frmCLNE_ExcelToSQL tu lo cambias luego)
tres botones
btnSeleccionar
btnVerDatos
btnTransferir
un textbox
txbFilePath
una barra de progreso
pgbTransferir

un DataGridView vacio
dgvWork

El objeto de los botones es el siguiente:
btnSeleccionar - Escoger o seleccionar la hoja de excel a transferir
btnVerDatos - Ver los datos de la hoja seleccionada en el datagrid
btnTransferir - Pasar los datos a la tabla en el servidor de SQL (en este caso se llama CLNE

El libro de excel debe tener los datos en una hoja llamada Data
Las celdas se pasan usando el indice de la columna
En la tabla se insertan las filas en base a los nombres de las columnas (ver el btntransferir)

Saludos

CJMM

'/////////////////////////////////////////////////////////////////////////////
'/ Programa....: frmClNe_ExcelToSQL
'/ Autor.......: Carlos Javier Medina Márquez
'/ Fecha.......: julio 25, 2012
'/ Objetivo....: Proceso de pasar los datos de ClNe desde una hoja de Excel a
'/ una tabla en SQL TruSys/clnem
'/ Comentarios.: Este es un modelo, se debe modificar para cada tabla
'/ Modificado..: None
'/////////////////////////////////////////////////////////////////////////////
Imports System.Data.SqlClient 'Para usar SQL
Imports System.Data.OleDb 'Para usar Excel
'/
Public Class frmClNe_ExcelToSQL
'//////////////////////////////////////////////////////////////////////////
'// Seccion de declaración
'//////////////////////////////////////////////////////////////////////////
'/-------------------------------------------------------------
'/ Cadena y conexión a la base de datos SQL
Public psFile_Path As String
Public psCadenaSQL As String = "Data Source=Server;" & _
"Initial Catalog=BaseDatos;" & _
"Integrated Security=True"
Public psConnectionSQL As New SqlConnection(psCadenaSQL)

Private msLibro As String = "" 'Libro de Excel sin nombre
Private msHoja As String = "Data" 'Debe tener una hoja llamada Data con los datos
'/------------------------------------------------------
Private msClNe_Id As String
Private msClNe_Code As String
Private msClNe_Name As String
Private msClNe_Sts As String
Private msLink_Id As String
'//////////////////////////////////////////////////////////////////////////
'// Seccion de carga del formulario
'//////////////////////////////////////////////////////////////////////////
Private Sub frmClNe_ExcelToSQL_Load(sender As System.Object, _
e As System.EventArgs) _
Handles MyBase.Load

End Sub
'//////////////////////////////////////////////////////////////////////////
'// Sección de proceso del click sobre los controles
'//////////////////////////////////////////////////////////////////////////
'/ Procesar el click sobre el botón de Seleccionar Hoja de Excel
Private Sub btnSeleccionar_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnSeleccionar.Click
Try
dgvWork.Columns.Clear()
dgvWork.DataSource = Nothing
OpenFileDialog.FileName = Nothing
txbFilePath.Text = ""
If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
txbFilePath.Text = OpenFileDialog.FileName
msLibro = OpenFileDialog.FileName
End If
Catch oMsg As Exception
MsgBox(oMsg.Message, MsgBoxStyle.Critical)
End Try
End Sub
'/ Procesar el click sobre el botón de Ver los datos seleccionados
Private Sub btnVerDatos_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnVerDatos.Click
Dim msExcelCS As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & msLibro & ";" & _
"Extended Properties=""Excel 12.0;" & _
"HDR=YES""" 'HDR=YES : La hoja tiene encabezados en la primera fila
Try
If Not System.IO.File.Exists(msLibro) Then
MsgBox("No se encontró el Libro: " & _
msLibro, MsgBoxStyle.Critical, _
"Ruta inválida")
Exit Sub
End If
Dim oAdapter As New OleDbDataAdapter("Select * From [" & msHoja & "$]", msExcelCS)
Dim ExcelData As New DataSet
oAdapter.Fill(ExcelData)
dgvWork.DataSource = ExcelData.Tables(0)
Catch oMsg As Exception
MsgBox(oMsg.Message, MsgBoxStyle.Critical)
End Try
End Sub
'/ Procesar el click sobre el botón de Transferir la información a la tabla
Private Sub btnTransferir_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnTransferir.Click
'/------------------------------------------------------
'/ Seccion de acciones a ejecutar en la base de datos
'/------------------------------------------------------
'/ Definir la barra medidora
'/ Se usa -2 porque la fila de titulos cuenta como registro
pgbTransfer.Minimum = 0
pgbTransfer.Maximum = dgvWork.Rows.Count - 2
'/ Transferir los datos desde el DataGridView a la Tabla, se debe asegurar que las
'/ columnas coincidan con las columnas de la tabla, se usan indices numericos para
'/ la hoja de excel y nombres de campos en la tabla
psConnectionSQL.Open()
Try
For s = 0 To dgvWork.RowCount() - 2
If dgvWork.Rows(s).Cells(0).Value.ToString <> "" Then
msClNe_Id = dgvWork.Rows(s).Cells(0).Value.ToString.Trim
Else
msClNe_Id = " "
End If
If dgvWork.Rows(s).Cells(1).Value.ToString <> "" Then
msClNe_Code = dgvWork.Rows(s).Cells(1).Value.ToString.Trim
Else
msClNe_Code = " "
End If
If dgvWork.Rows(s).Cells(2).Value.ToString <> "" Then
msClNe_Name = dgvWork.Rows(s).Cells(2).Value.ToString.Trim
Else
msClNe_Name = " "
End If
If dgvWork.Rows(s).Cells(3).Value.ToString <> "" Then
msLink_Id = dgvWork.Rows(s).Cells(3).Value.ToString.Trim
Else
msLink_Id = " "
End If
If dgvWork.Rows(s).Cells(4).Value.ToString <> "" Then
msClNe_Sts = dgvWork.Rows(s).Cells(4).Value.ToString.Trim
Else
msClNe_Sts = "A"
End If
'/-------------------------------------------------------------
Try
Dim msInsertSQL As String = "Insert into clnem(" & _
"cclne_id, " & _
"cclne_code, " & _
"cclne_name, " & _
"clink_id, " & _
"cclne_status " & _
") values('" & _
msClNe_Id & "', '" & _
msClNe_Code & "', '" & _
msClNe_Name & "', '" & _
msLink_Id & "', '" & _
msClNe_Sts & _
"')"
Dim cmdInsertSQL As New SqlCommand(msInsertSQL, psConnectionSQL)
cmdInsertSQL.ExecuteNonQuery()
Catch oMsg As Exception
MsgBox(oMsg.Message, MsgBoxStyle.Critical)
End Try
pgbTransfer.Value = s
Me.Refresh()
Next
Catch oMsg As Exception
MsgBox(oMsg.Message, MsgBoxStyle.Critical)
End Try
dgvWork.DataSource = Nothing
psConnectionSQL.Close()
MsgBox("Carga Clase Negocio a Tabla clnem terminada", MsgBoxStyle.Information, "Información")
Me.Close()
End Sub

End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como importar datos de hoja de calculo excel a una BD sql

Publicado por Novata (2 intervenciones) el 03/04/2014 21:11:14
Hola tengo una duda, apenas me inicie en esto

quiero saber si cuando estoy trabajando con la base de datos por medio de un programa que me permite entrar en
este caso al servidor mysql donde tengo mi base de datos ... ¿que es lo que se coloca en la parte de "server" en la cadena de conexion??

puse la ip del servidor pero me marca que no esta bien, si compila pero tengo el error en la conexion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar