1 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Al usar este sitio acepta el uso de cookies para anlisis, contenido personalizado y publicidad.
Saber ms
Suscripciones a MSDN
Obtener herramientas
Iniciar sesin
Developer Network
Tecnologas
Foros
Descargas
Blogs
Programas
Comunidad
Asesores tcnicos
Documentacin
Ejemplos
Sganos
Channel 9
Buscar conversaciones
relacionadas
Acceso rpido
Principales respuestas
70,850
Puntos
Pregunta
Superior 0.1%
Hola a todos:
Alguien sabe como puedo importar datos de una hoja de excel 2010 a unas tablas almacenadas en una Bd
SqlCompact 3.5 ?, son mas de 100 mil registros los que quiero importar.
Enrique M. Montejo
MVP
13
Mostrar actividad
Conversaciones relacionadas
importantes
0
Inicie
sesin
para
votar
Gracias!
Saludos desde Monterrey, N.L. Mxico
Luis Escobar
Editado Luis_Escobar
Responder | Citar
Luis_Escobar Softtek
12,265 Puntos
Respuestas
10/20/2014 4:07 PM
2 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Para no demorar mucho la respuesta, te voy a decir lo que tienes que hacer para pasar los datos de Excel a
tu base de SQL Server Compact; despus, lo mismo es cuestin de "limar" un poco el cdigo.
2
Inicie
sesin
para
votar
Una de las ventajas que tienen los objetos DataTable es que estos son independientes de cualquier origen
de datos. Cuando tu rellenas de datos un objeto DataTable, estos datos residen en memoria y no
dependen del origen de datos del cual los has tomado.
Posteriormente, cuando desees actualizar el origen de datos con los datos existentes actualmente en el
objeto DataTable, se le pasa ste objeto al mtodo Update de un adaptador de datos debidamente
configurado. Pues aqu es donde est la clave de todo; en el adaptador de datos que debes de
configurar para actualizar tu tabla de la base de SQL Server Compact.
En resumidas cuentas. Tienes que rellenar un objeto DataTable con los datos de la hoja de Excel, y pasarle
ese objeto al mtodo Update de un objeto SqlCeDataAdapter correctamente configurado.
Para obtener el objeto DataTable con los datos de tu libro de Excel 2010, bien te puede servir la siguiente
funcin:
Imports System.Data.OleDb
Imports System.Data.SqlServerCe
Private Function GetDataFromExcel() As DataTable
Try
' Configuramos la conexin con el libro de trabajo de Excel.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Mis documentos\Libro1.xlsx;" & _
"Extended Properties='Excel 12.0 Xml;HDR=Yes;'"
Using cnn As New OleDbConnection(connString)
Dim cmd As OleDbCommand = cnn.CreateCommand()
' Seleccionamos todos los registros de la Hoja1.
'
cmd.CommandText = "SELECT * FROM [Hoja1$]"
' Creamos y configuramos el adaptador de datos.
'
Dim da As New OleDbDataAdapter(cmd)
' Creamos un nuevo objeto DataTable.
'
Dim dt As New DataTable("Hoja1")
' Rellenamos el objeto DataTable.
'
da.Fill(dt)
' Devolvemos el objeto DataTable.
'
Return dt
End Using
Catch
Throw
End Try
End Function
Si observas que no te toma bien los datos de la hoja de Excel, aade el parmetro IMEX=1 a las
propiedades extendidas de la cadena de conexin:
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
10/20/2014 4:07 PM
3 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
10/20/2014 4:07 PM
4 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
10/20/2014 4:07 PM
5 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
1
Inicie
sesin
para
votar
Enrique Martnez
[MS MVP - VB]
Nota informativa: La informacin contenida en este mensaje, as como el cdigo fuente incluido en el
mismo, se proporciona COMO EST, sin garantas de ninguna clase, y no otorga derecho alguno. Usted
asume cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o sugerido en el presente
mensaje.
Si esta respuesta le ha resultado til, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instruccin Option Strict.
70,850 Puntos
10/20/2014 4:07 PM
6 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" pregunt:
0
Inicie
sesin
para
votar
Enrique Martnez
[MS MVP - VB]
Nota informativa: La informacin contenida en este mensaje, as como el cdigo fuente incluido en el
mismo, se proporciona COMO EST, sin garantas de ninguna clase, y no otorga derecho alguno. Usted
asume cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o sugerido en el presente
mensaje.
Si esta respuesta le ha resultado til, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instruccin Option Strict.
70,850 Puntos
10/20/2014 4:07 PM
7 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Para no demorar mucho la respuesta, te voy a decir lo que tienes que hacer para pasar los datos de Excel a
tu base de SQL Server Compact; despus, lo mismo es cuestin de "limar" un poco el cdigo.
2
Inicie
sesin
para
votar
Una de las ventajas que tienen los objetos DataTable es que estos son independientes de cualquier origen
de datos. Cuando tu rellenas de datos un objeto DataTable, estos datos residen en memoria y no
dependen del origen de datos del cual los has tomado.
Posteriormente, cuando desees actualizar el origen de datos con los datos existentes actualmente en el
objeto DataTable, se le pasa ste objeto al mtodo Update de un adaptador de datos debidamente
configurado. Pues aqu es donde est la clave de todo; en el adaptador de datos que debes de
configurar para actualizar tu tabla de la base de SQL Server Compact.
En resumidas cuentas. Tienes que rellenar un objeto DataTable con los datos de la hoja de Excel, y pasarle
ese objeto al mtodo Update de un objeto SqlCeDataAdapter correctamente configurado.
Para obtener el objeto DataTable con los datos de tu libro de Excel 2010, bien te puede servir la siguiente
funcin:
Imports System.Data.OleDb
Imports System.Data.SqlServerCe
Private Function GetDataFromExcel() As DataTable
Try
' Configuramos la conexin con el libro de trabajo de Excel.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Mis documentos\Libro1.xlsx;" & _
"Extended Properties='Excel 12.0 Xml;HDR=Yes;'"
Using cnn As New OleDbConnection(connString)
Dim cmd As OleDbCommand = cnn.CreateCommand()
' Seleccionamos todos los registros de la Hoja1.
'
cmd.CommandText = "SELECT * FROM [Hoja1$]"
' Creamos y configuramos el adaptador de datos.
'
Dim da As New OleDbDataAdapter(cmd)
' Creamos un nuevo objeto DataTable.
'
Dim dt As New DataTable("Hoja1")
' Rellenamos el objeto DataTable.
'
da.Fill(dt)
' Devolvemos el objeto DataTable.
'
Return dt
End Using
Catch
Throw
End Try
End Function
Si observas que no te toma bien los datos de la hoja de Excel, aade el parmetro IMEX=1 a las
propiedades extendidas de la cadena de conexin:
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
10/20/2014 4:07 PM
8 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
0
Inicie
sesin
para
votar
Los campos de la hoja de Excel y de la tabla de SqlCompact son los mismos? Tienen la misma estructura?
Si, las tablas de mi Bd SqlCompact ya estan creadas y tienen la misma estructura que el archivo de Excel.
Analizo a detalle el ejemplo y comento como me fue!
Gracias!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Luis_Escobar Softtek
12,265 Puntos
Enrique:
Antes que atacarte con preguntas como siempre, quiero agradecerte por todas tus atenciones tanto para
este caso como para los muchos temas pasados en los cuales he recibido ayuda tuya.
0
Inicie
sesin
para
votar
En base al cdigo que me proporcionas, estoy tratando de adaptar un FileDialog para alimentar el path
de ubicacin del archivo que contiene los datos, uso el FileDialog para cargar el nombre del archivo en un
control ListBox el cual tiene como ValueMember el Fullname del archivo.
Despus por medio de un botn tomo el Item Seleccionado y trato de llenar el DataTable pero me dice
que:
"La tabla externa no tiene el formato esperado"
Estoy tratando de importar un archivo .Csv y en esta seccin de cdigo es donde me manda el error:
Private Sub procesar_Click(sender As System.Object, e As System.EventArgs) Handles procesar.Click
If (ListBox2.SelectedItems.Count = 0) Then Return
Dim cadenaconexion As String = String.Format( _
"Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Extended Properties = 'Excel 12.0 Xml;HDR=Yes;';" & _
"Data Source = {0}", ListBox2.SelectedValue)
'Try
Using cnn As New OleDbConnection(cadenaconexion)
Dim sql As String = "SELECT * FROM [1_Aguascalientes$]"
Dim da As New OleDbDataAdapter(sql, cnn)
Dim dt As New DataTable()
da.Fill(dt)'Aqui es donde me manda el mensaje
DataGridView1.DataSource = dt
End Using
'Catch ex As Exception
' ' Se ha producido un error.
' MessageBox.Show(ex.Message)
'End Try
End Sub
Sigo agradecido enormemente por el seguimiento a mis casos...
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
9 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
10/20/2014 4:07 PM
10 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Enrique.
En este momento realizo los cambios necesarios. Gracias regreso para comentar como me fue... :)
0
Inicie
sesin
para
votar
Luis_Escobar Softtek
12,265 Puntos
Hola Enrique:
Estoy tratando de realizar unas pruebas de insercion con datos pequeos pero me marca un error:
0
Inicie
sesin
para
votar
"No se puede cargar los componentes nativos de SQL Server Compact correspondientes al proveedor
ADO.NET de la versin 8080. Instale la versin correcta de SQL Server Compact. Vea el artculo 974247 de la
KB para obtener ms detalles."
En esta linea es donde me detiene el codigo:
"Using cnn As New
SqlCeConnection(ConfigurationManager.ConnectionStrings("Exportar_ExcelaBd.My.MySettings.Setting1").ToSt
ring())"
Tendrs alguna idea del porque de este mensaje?
Otra de las cosas que me estn sucediendo:
Muestro las filas cargadas al DataTable a un Control DaTaGridView pero:
* El primer registro que conforma mi primer celda del archivo csv, no me lo carga, simplemente me
aparece una celda en blanco, solo la primer celda de la primer columna, el resto si me aparece.
* Aquellos valores que contienen un acento me cambia su valor, por ejemplo:
Valor en el archivo Csv = Comond
Valor mostrado en DGV = Comond
Muchas gracias por toda tu ayuda!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Editado Luis_Escobar
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
11 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
10/20/2014 4:07 PM
12 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Gracias Enrique:
Revise el Regedit y el valor que tengo por Default es "ANSI", no obstante se lo cambie por "OEM" compile
mi proyecto corri y despues regrese el valor "ANSI" y el problema de los acentos aun persiste.
0
Inicie
sesin
para
votar
Con respecto al tema de proveedor de Bd, te comento que en App.Config tengo esto;
<connectionStrings>
<add name="MyDatabaseConnectionString"
connectionString="Data Source=C:\Users\Jose Luis Escibar\Desktop\MyDatabase.sdf"
providerName="Microsoft.SqlServerCe.Client.3.5" />
</connectionStrings>
Bueno, si crees que el tema ya resulta demasiado redundante, te agradesco de sobremanera tu ayuda,
seguire buscando la solucion de este problema, solo que por hoy ya fue suficiente me quedan 4 hrs para
descansar. Pero prometo leer los temas que me sugieres.
Gracias marco desde ya tus respuestas!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Editado Luis_Escobar
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
13 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
Enrique Martnez
[MS MVP - VB]
Nota informativa: La informacin contenida en este mensaje, as como el cdigo fuente incluido en el
mismo, se proporciona COMO EST, sin garantas de ninguna clase, y no otorga derecho alguno. Usted
asume cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o sugerido en el presente
mensaje.
Si esta respuesta le ha resultado til, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instruccin Option Strict.
70,850 Puntos
10/20/2014 4:07 PM
14 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Estamos hablando de los datos existentes en el archivo con extensin *.csv. Si es as, ignoro ya lo
que puede estar pasando.
0
Inicie
sesin
para
votar
Mmmm, en el archivo los datos se muestran bien, acentos donde van acentos, el problema radica al
momento de volcar esos datos al datatable para despues mostrarlo en un DataGridView, es en este ultimo
donde ya no se visualizan correctamente las palabras que llevan acentos.
Has sacado algo en claro del artculo de la Base del Conocimiento?
Todo lo que he leido hasta el momento a punta a que tengo una mala instalacion del SQlCompact o que
lo estoy usando en un aquipo de 64 bits, pero te comento que tengo otras aplicaciones funcionando con
la misma version del sql 3.5 y funcionan a la perfeccion con las tipicias instrucciones (select, insert, delete,
update) ademas de que mi equipo es de 32 bits. De ahi en fuera no he encontrado algo mas concreto.
Aun asi seguire buscando hasta dar con el clavo!
Gracias!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
15 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
3
Inicie
sesin
para
votar
> Mmmm, en el archivo los datos se muestran bien, acentos donde van
> acentos, el problema radica al momento de volcar esos datos al
> datatable para despues mostrarlo en un DataGridView, es en este
> ultimo donde ya no se visualizan correctamente las palabras que llevan acentos.
En el archivo de texto pueden verse correctamente las palabras acentuadas, pero con qu codificacin se
guardaron? ANSI, Unicode, UTF-8?
Salvo que ests utilizando unos caracteres inexistentes en el idioma espaol, ingls, francs, alemn,
italiano, y de otros lenguajes similares, debes de procurar que la codificacin del archivo de texto sea ANSI.
Para salir de dudas, vete de nuevo a la clave del registro que te indiqu anteriormente, y especifica el valor
Unicode al parmetro CharacterSet.
Si en tu sistema operativo tienes una configuracin regional de espaol, lo mismo te aparece ahora el
siguiente mensaje de error:
El separador de campos de la especificacin de archivo de texto
coincide con el separador decimal o el delimitador de texto.
En cuyo caso tendrs que aplicar la tcnica que explico en el siguiente artculo:
Cmo leer un archivo de texto delimitado por comas
Otra cosa que tambin puedes hacer para asegurarte que la codificacin es ANSI es editar el archivo con el
Bloc de Notas, y seleccionas el men Archivo --> Guardar cmo.
Si en el control ComboBox de codificacin te aparece Unicode, est claro que el archivo tiene esa
codificacin, por lo que dicha codificacin es la que debers de utilizar cuando desees abrir el archivo de
texto delimitado con el ISAM de los motores Microsoft Jet o Microsoft ACE (CharacterSet = Unicode).
Selecciona la codificacin ANSI y guarda el archivo CON OTRO NOMBRE, para no sobrescribir el archivo
original, e intenta de nuevo abrir el nuevo archivo creado procurando que en el parmetro CharacterSet
del registro de Windows tenga el valor ANSI, que es su valor por defecto.
> Todo lo que he leido hasta el momento a punta a que tengo una
> mala instalacion del SQlCompact o que lo estoy usando en un
> equipo de 64 bits, pero te comento que tengo otras aplicaciones
> funcionando con la misma version del sql 3.5 y funcionan a la
> perfeccion con las tipicias instrucciones (select, insert,
> delete, update) ademas de que mi equipo es de 32 bits.
Y la base de datos se cre con la versin 3.5?
Desde luego es muy raro el error que ests obteniendo, porque el equipo donde ahora mismo te estoy
escribiendo tambin es de 32 bits, y tengo instalado tanto la versin 3.5 como 4.0 de SQL Server Compact,
y desde luego no me aparece ningn mensaje de error cuando intento pasar datos de un archivo de texto
delimitado por comas a una tabla de SQL Server Compact, bien con formato 3.5 o con formato 4.0.
Desde luego, no tengo ni la ms mnima idea del motivo que obtengas ese mensaje de error.
Qu versin de SQL Server Compact tienes referenciada en el proyecto donde ests teniendo los
problemas? Puedes escribir el cdigo que ests ejecutando para conectarte con la base de datos y llamar
al mtodo Update del adaptador de datos? Has corregido los valores de la cadena de conexin que
aparecen en el archivo de configuracin de tu aplicacin?
Enrique Martnez
[MS MVP - VB]
Nota informativa: La informacin contenida en este mensaje, as como el cdigo fuente incluido en el
mismo, se proporciona COMO EST, sin garantas de ninguna clase, y no otorga derecho alguno. Usted
asume cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o sugerido en el presente
mensaje.
Si esta respuesta le ha resultado til, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instruccin Option Strict.
10/20/2014 4:07 PM
16 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
0
Inicie
sesin
para
votar
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
17 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
2
Inicie
sesin
para
votar
10/20/2014 4:07 PM
18 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Hola Enrique:
De haber sabido el eso pudiera ser clave para resolver mi problema, creeme que lo hubiera publicado
desde el inicio, pero no crei que el problema pudiera derivar desde el origen del reporte... :(
0
Inicie
sesin
para
votar
Con relacion a los Header's del reporte, antes de intentar impotar los valores del archivo *.Csv, yo mismo
ingreso los nombres de las columnas manualmente y los nombre tal cual como se llaman en la Bd a la cual
pretendo migrar, sin que esto resuelva mi problema y no decir del "HDR = YES" de la cadena de conexion.
Con respecto al articulo que me recomendaste "Cmo pasar datos entre diferentes orgenes de datos" de
ahi tomer la mayoria del codigo para poder leer el archivo.
Por el momento me es imposible probar lo que me proporcionas, ya que he tenido una jornada laboral de
ya mas de 14 hrs y al parecer se extendera unas cuantas hrs mas. Pero te prometo que tan pronto pueda
entregar mi trabajo y descansar unas hrs, hare los cambios pertinentes en mi aplicacion y regreso para
comentar como me fue...
Tratare de ser mas explicito en mis futuras consultas... :-(
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
19 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
"Luis_Escobar" escribi:
1
Inicie
sesin
para
votar
Enrique Martnez
[MS MVP - VB]
Nota informativa: La informacin contenida en este mensaje, as como el cdigo fuente incluido en el
mismo, se proporciona COMO EST, sin garantas de ninguna clase, y no otorga derecho alguno. Usted
asume cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o sugerido en el presente
mensaje.
Si esta respuesta le ha resultado til, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instruccin Option Strict.
70,850 Puntos
10/20/2014 4:07 PM
20 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Enrique:
0
Inicie
sesin
para
votar
Editado Luis_Escobar
Luis_Escobar Softtek
12,265 Puntos
10/20/2014 4:07 PM
21 de 22
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Hola... gracias por el link... pero me sige marcando error en la conexion ya cambio varias veces y aun me
sige marcando el error...
me por drias a yudar a checarla...
0
Inicie
sesin
para
votar
Editado PaulithaRubi
Centros de desarrollo
Windows
PaulithaRubi
Recursos de aprendizaje
Comunidad
Soporte tcnico
Foros
Autosoporte
Channel 9
Blogs
0 Puntos
10/20/2014 4:07 PM
22 de 22
Office
https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
Puentes de interoperabilidad
Codeplex
MSDN Magazine
Visual Studio
Nokia
Programas
BizSpark (para nuevas empresas)
Microsoft Azure
DreamSpark
Imagine Cup
Ms...
Espaa (Espaol)
Boletn
Privacidad y cookies
Trminos de uso
Marcas comerciales
2014 Microsoft
10/20/2014 4:07 PM