importar datos de excel a sqlcompact
DESCRIPTION
Datos de Excel a SQL CompactTRANSCRIPT
-
Se uni Jun 2006
Conversaciones d
Mostrar actividad
Principales respuestas
70,850
PuntosSuperior 0.1%
Enrique M. Montejo
MVP
Conversaciones relacionadasimportantes
Como importar datos de excel aSqlCompact por medio de unaconsulta?
Importar de Excel a SQL Server
importar datos de un excel
Importar datos desde Excel
importar datos de excel a undatagridview
Formular una pregunta
Acceso rpido
Buscar conversacionesrelacionadas
Buscar preguntas del foro
Desarrollo >
Importar datos de Excel a SqlCompact
Pregunta
0Iniciesesinparavotar
Responder | Citar
martes, 02 de octubre de 2012 20:57
Luis_Escobar Softtek 12,265 Puntos
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.
Gracias!
Saludos desde Monterrey, N.L. Mxico
Luis Escobar
Editado Luis_Escobar martes, 02 de octubre de 2012 20:57
Respuestas
Lenguaje VB.NET
5 6 13
Al usar este sitio acepta el uso de cookies para anlisis, contenido personalizado y publicidad. Saber ms
Developer Network
Suscripciones a MSDN Obtener herramientas Iniciar sesin
Tecnologas Descargas Programas Comunidad Documentacin Ejemplos Sganos
Foros Blogs Asesores tcnicos Channel 9
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
1 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
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.
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;" & _
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
2 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
"Luis_Escobar" escribi:
> "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:
Luis, un archivo con extensin *.csv NO ES UN ARCHIVO DE EXCEL; se podr abrir con Microsoft Excel, pero
un archivo *.csv es un ARCHIVO DE TEXTO PLANO DELIMITADO POR COMAS, por lo que es normal que
obtengas el error que ests obteniendo, ya que en lugar de utilizar el ISAM de Excel del motor de datos
Microsoft ACE, tienes que utilizar el ISAM de texto de dicho motor de datos.
Modifica la cadena de conexin para que se adapte al ISAM de texto:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=Yes;'"
> 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.
Fjate que en el parmetro 'Data Source' solamente se indica la ruta que contiene la carpeta donde se
encuentra el archivo *.csv. Como dices que ests utilizando un cuadro de dilogo para seleccionar el
archivo, me parece estupendo, pero en el parmetro 'Data Source' no puede aparecer el nombre del
archivo; slo la ruta de la carpeta SIN EL NOMBRE DEL ARCHIVO DE TEXTO. As que tendrs que eliminar
de la ruta completa el nombre del archivo.
El nombre del archivo de texto, sin la ruta, se especifica en la consulta SQL de seleccin:
' Seleccionamos todos los registros de la Hoja1.
'
cmd.CommandText = "SELECT * FROM [Archivo#csv]"
> 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.
Lo que hace falta es que la primera lnea del archivo de texto CONTENGA EL NOMBRE DE LOS CAMPOS,
porque de no ser as, vas a tener que mapear el objeto DataTable obtenido del archivo *.csv para que los
nombres de los campos coincidan con los de la tabla de la base de SQL Server Compact, en cuyo caso te
remito a la lectura del siguiente artculo:
Cmo pasar datos entre diferentes orgenes de datos
En ese artculo explico la misma tcnica que te coment en mi anterior respuesta para transferir datos de
un origen de datos a otro. Si desde un primer momento hubieras indicado que se trataba de un archivo
con extensin *.csv, lo mismo tendras ya el problema resuelto. ;-)
Si en la primera fila del archivo de texto no aparecen los nombres de los campos, debers de especificar tal
circunstancia en el parmetro HDR de las propiedades extendidas de la cadena de conexin:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=NO;'"
Es decir:
HDR=Yes --> La primera fila contiene el nombre de los campos
HDR=No --> La primera fila NO contiene el nombre de los campos
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
3 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
"Luis_Escobar" escribi:
> Los obtuve del SqlServer, resultado de una cosulta de seleccion,
> click derecho sobre el resultado mostrado, guardar resultado como?...
>
No hubiera estado de ms que eso mismo lo hubieses indicado desde un primer momento. :-(
Si has obtenido los datos de esa manera, el archivo tiene una codificacin UTF-8, al menos esa es la
codificiacin que yo obtenido al hacer una prueba, por tanto, es normal que no observes bien las palabras
acentuadas cuando lo abres con el ISAM de texto del motor de datos Microsoft Jet o Microsoft ACE, da
igual.
Y la solucin ya te la he dado anteriormente: abre el archivo con el Bloc de Notas, seleccionas Guardar
cmo, modificas la codificacin a ANSI, y lo guardas con otro nombre, o lo sobrescribes si as lo crees
conveniente.
> Ahora lo que me esta impidiendo "Actualizar" mi tabla, es el primer
> registro que "NO SE CARGA", ya que la primer celda de mi control
> DataGridView se muestra esa celda vacia, y como lo que vuelco a mi
> BD es el DataTable, la regla de no permitir Nulos en mi Bd me manda
> una excepcion.
Como dices que has creado el archivo *.csv con la opcin de Guardar resultados cmo de la consulta
ejecutada dentro del entorno de SQL Server, la primera lnea del archivo NO TIENE EL NOMBRE DE LAS
COLUMNAS, por tanto, esa caracterstica se la tienes que especificar en la cadena de conexin:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=No;'"
Es decir:
HDR=Yes --> La primera fila contiene el nombre de los campos
HDR=No --> La primera fila NO contiene el nombre de los campos
Lo anterior ya te lo coment en otra respuesta que aparece ms arriba. Y los nombres de los campos por
defecto sern F1, F2, F3, F4, F5, etc., por lo que tienes que mapear los nombres de los campos si deseas
que se llamen de igual manera que los existentes en tu tabla de SQL Server Compact, porque de no
hacerlo, va a ser imposible que puedas exportar los datos a tu base de SQL Server Compact, o a otra de
cualquier otro tipo diferente. Para ello, tambin te coment que leyeras el siguiente artculo:
Cmo pasar datos entre diferentes orgenes de datos
Y si deseas que te aparezcan los nombres de los campos, entra en las Opciones de SQL Server
Management Studio (men Herramientas --> Opciones...) y haz las modificaciones que aparecen en la
siguiente imagen:
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
4 de 22 10/20/2014 4:07 PM
-
1Iniciesesinparavotar
Responder | Citar
sbado, 06 de octubre de 2012 16:37
Enrique M. Montejo (MVP) 70,850 Puntos
"Luis_Escobar" escribi:
> 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 ...
En mi anterior mensaje te he comentado lo que tienes que hacer para que los nombres de los campos
aparezcan automticamente en el archivo de texto creado desde SQL Server Management Studio.
> ... y los nombre tal cual como se llaman en la Bd a la cual
> pretendo migrar, sin que esto resuelva mi problema ...
El problema que tienes con el archivo de texto entiendo que solamente es LA CODIFICIACIN QUE
TIENE, porque abrirlo parece ser que lo abres con el cdigo que te indiqu. Se vern mal las palabras
acentuadas, pero lo que es leer los datos se leen, mal pero se leen, por tanto, el cdigo fuente es correcto.
Lo que tienes que hacer es modificar la codificacin del archivo para que ste tenga la codificacin ANSI,
que es el valor que por defecto tiene el ISAM de texto en el parmetro CharacterSet de la clave del registro
de Windows que te indiqu, y observars cmo aparecen correctamente las palabras con acentos.
Sigo sin poder ver el contenido del archivo de texto, aunque sean las TRES PRIMERAS LNEAS, para
intentar averiguar el motivo de que no se carge la primera lnea.
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.
Editado Enrique M. Montejo MVP, Moderator sbado, 06 de octubre de 2012 16:53
Marcado como respuesta Luis_Escobar lunes, 08 de octubre de 2012 21:14
Todas las respuestas
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
5 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
mircoles, 03 de octubre de 2012 6:45
Enrique M. Montejo (MVP) 70,850 Puntos
"Luis_Escobar" pregunt:
> Alguien sabe como puedo importar datos de una hoja
> de excel 2010 a unas tablas almacenadas en una Bd
> SqlCompact 3.5 ?
Los campos de la hoja de Excel y de la tabla de SqlCompact son los mismos? Tienen la misma
estructura?
Si las estructuras de las tablas son diferentes, escribe en tu mensaje los nombres de los campos de la hoja
de Excel y los de la tabla de SqlCompact cuyos datos quieres pasar de Excel a SqlCompact.
Respndeme a las preguntas y ver lo que se puede hacer. Sera aconsejable que la tabla de SqlCompact
existiera en la base de datos antes de efectuar la exportacin de datos.
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.
Editado Enrique M. Montejo MVP, Moderator mircoles, 03 de octubre de 2012 6:49
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
6 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
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.
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;" & _
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
7 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
mircoles, 03 de octubre de 2012 19:15
Luis_Escobar Softtek 12,265 Puntos
Enrique una disculpa por mi respuesta tan tarda a tus preguntas:
igual y el ejemplo que me regalas me servir creo que no esta dems responderte.
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
0Iniciesesinparavotar
Responder | Citar
jueves, 04 de octubre de 2012 0:09
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.
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
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
8 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
"Luis_Escobar" escribi:
> "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:
Luis, un archivo con extensin *.csv NO ES UN ARCHIVO DE EXCEL; se podr abrir con Microsoft Excel, pero
un archivo *.csv es un ARCHIVO DE TEXTO PLANO DELIMITADO POR COMAS, por lo que es normal que
obtengas el error que ests obteniendo, ya que en lugar de utilizar el ISAM de Excel del motor de datos
Microsoft ACE, tienes que utilizar el ISAM de texto de dicho motor de datos.
Modifica la cadena de conexin para que se adapte al ISAM de texto:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=Yes;'"
> 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.
Fjate que en el parmetro 'Data Source' solamente se indica la ruta que contiene la carpeta donde se
encuentra el archivo *.csv. Como dices que ests utilizando un cuadro de dilogo para seleccionar el
archivo, me parece estupendo, pero en el parmetro 'Data Source' no puede aparecer el nombre del
archivo; slo la ruta de la carpeta SIN EL NOMBRE DEL ARCHIVO DE TEXTO. As que tendrs que eliminar
de la ruta completa el nombre del archivo.
El nombre del archivo de texto, sin la ruta, se especifica en la consulta SQL de seleccin:
' Seleccionamos todos los registros de la Hoja1.
'
cmd.CommandText = "SELECT * FROM [Archivo#csv]"
> 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.
Lo que hace falta es que la primera lnea del archivo de texto CONTENGA EL NOMBRE DE LOS CAMPOS,
porque de no ser as, vas a tener que mapear el objeto DataTable obtenido del archivo *.csv para que los
nombres de los campos coincidan con los de la tabla de la base de SQL Server Compact, en cuyo caso te
remito a la lectura del siguiente artculo:
Cmo pasar datos entre diferentes orgenes de datos
En ese artculo explico la misma tcnica que te coment en mi anterior respuesta para transferir datos de
un origen de datos a otro. Si desde un primer momento hubieras indicado que se trataba de un archivo
con extensin *.csv, lo mismo tendras ya el problema resuelto. ;-)
Si en la primera fila del archivo de texto no aparecen los nombres de los campos, debers de especificar tal
circunstancia en el parmetro HDR de las propiedades extendidas de la cadena de conexin:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=NO;'"
Es decir:
HDR=Yes --> La primera fila contiene el nombre de los campos
HDR=No --> La primera fila NO contiene el nombre de los campos
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
9 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
viernes, 05 de octubre de 2012 1:45
Luis_Escobar Softtek 12,265 Puntos
Enrique.
En este momento realizo los cambios necesarios. Gracias regreso para comentar como me fue... :)
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
0Iniciesesinparavotar
Responder | Citar
viernes, 05 de octubre de 2012 5:57
Luis_Escobar Softtek 12,265 Puntos
Hola Enrique:
Estoy tratando de realizar unas pruebas de insercion con datos pequeos pero me marca un error:
"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 viernes, 05 de octubre de 2012 6:00
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
10 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
"Luis_Escobar" escribi:
> Estoy tratando de realizar unas pruebas de insercion
> con datos pequeos pero me marca un error:
>
> "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").ToString())"
>
> Tendrs alguna idea del porque de este mensaje?
Luis, te comento que no soy "adivino" para averiguar el proveedor de datos invariable que aparece en la
cadena de conexin con nombre del archivo de configuracin de tu aplicacin.
La versin del proveedor invariable de SQL Server Compact que debers de especificar en tu archivo
app.config, deber de corresponderse con la versin de SQL Server Compact que tenga la base de datos
que vayas a utilizar, y que se supone est instalada correctamente en el equipo.
Para la versin 3.5 de SQL Server Compact, una tpica cadena de conexin con nombre podra ser:
Y para su versin 4.0:
Observas el valor del parmetro 'providerName'? Ese es el valor del proveedor de datos invariable,
aunque no creo que ests utilizando un proveedor comn de datos. Me refiero a que estars utilizando los
objetos propios de la biblioteca de SQL Server Compact: SqlConnectionCe, SqlCommandCe, etc., en lugar
de utilizar DbConnection, DbCommand, etc.
Yo lo nico que te puedo decir es que tendrs que referenciar en tu proyecto de Visual Basic la versin de
SQL Server Compact que se corresponda con la versin de la base de datos que vas a utilizar.
No obstante, chale un vistazo al artculo de la Base del Conocimiento de Microsoft que se indica en el
mensaje de error:
REVISIN: Recibe un mensaje de error al ejecutar una aplicacin basada en SQL Server Compact 3.5
despus de instalar la versin de 32 bits de SQL Server Compact Edition 3.5 Service Pack 2 en un equipo x
64
> Otra de las cosas que me estn sucediendo:
>
> * El primer registro que conforma mi primer
> celda del archivo csv, no me lo carga
> simplemente me aparece una celda en blanco.
>
> * Para ver si me carga bien los datos,
> establezco el DataSource de un control
> DataGridView el DataTable obtenido pero
> me doy cuenta que aquellos valores que
> contiene un acento me cambia su valor, por ejemplo:
>
> Valor en el archivo Csv = Comond
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
11 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
viernes, 05 de octubre de 2012 7:00
Luis_Escobar Softtek 12,265 Puntos
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.
Con respecto al tema de proveedor de Bd, te comento que en App.Config tengo esto;
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 viernes, 05 de octubre de 2012 7:01
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
12 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
Responder | Citar
viernes, 05 de octubre de 2012 7:58
Enrique M. Montejo (MVP) 70,850 Puntos
"Luis_Escobar" escribi:
> 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.
Estamos hablando de los datos existentes en el archivo con extensin *.csv. Si es as, ignoro ya lo que
puede estar pasando.
> Con respecto al tema de proveedor de Bd, te comento que
> en App.Config tengo esto;
>
> ... providerName="Microsoft.SqlServerCe.Client.3.5" />
El parmetro 'providerName' est mal. Para la versin 3.5 de SQL Server Compact tiene que ser:
... providerName="System.Data.SqlServerCe.3.5" />
Pero insisto que esto slo afectara si en tu aplicacin ests trabajando con un proveedor de datos comun,
es decir, con un objeto DBConnection.
Si has referenciado en tu proyecto la biblioteca de SQL Server Compact correspondiente a la versin 3.5, y
ests utilizando los objetos del espacio de nombres System.Data.SqlServerCe, de poco sirve que en la
cadena de conexin del archivo app.config aparezca un valor para el parmetro 'providerName'.
Has sacado algo en claro del artculo de la Base del Conocimiento?
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.
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
13 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
viernes, 05 de octubre de 2012 16:46
Luis_Escobar Softtek 12,265 Puntos
Estamos hablando de los datos existentes en el archivo con extensin *.csv. Si es as, ignoro ya lo
que puede estar pasando.
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
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
14 de 22 10/20/2014 4:07 PM
-
3Iniciesesinparavotar
"Luis_Escobar" escribi:
> 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.
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
15 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
sbado, 06 de octubre de 2012 12:53
Luis_Escobar Softtek 12,265 Puntos
Enrique buenos dias:
Para lo del archivo delimitado por comas:
con qu codificacin se guardaron? ANSI, Unicode, UTF-8?
Los obtuve del SqlServer, resultado de una cosulta de seleccion, click derecho sobre el resultado
mostrado, guardar resultado como?...
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).
Para mi que va por este lado, ya que en el archivo los datos se muestran todos correctamentes, no siendo
asi en el control DataGridView...
En cuanto a la BD:
Y la base de datos se cre con la versin 3.5?
Si, se diseo en la version 3.5.
Aunque te comento que este tema ya quedo resuelto al menos ya se lo que tengo que hacer, que es,
cambiar mi diseo a un formulario limpio, lo mismo con la codificacion, crear una nueva referencia a la
libreria Import System.Data.SqlServerCe, una nueva conexion, y Vual!!! Ayer hice eso y tuve una conexion
exitosa!!!
Ahora lo que me esta impidiendo "Actualizar" mi tabla, es el primer registro que "NO SE CARGA", ya que
la primer celda de mi control DataGridView se muestra esa celda vacia, y como lo que vuelco a mi BD es el
DataTable, la regla de no permitir Nulos en mi Bd me manda una excepcion.
En resumen:
Problema con la Bd -------> ok
Problema con los Acentros ------->Pendiente
Problema con el primer registro ------>Pendiente
Creo, que decir gracias representa muy poco para expresar mi "agradecimiento" por tu ayuda y
seguimiento a este caso, no obstante te lo dire una vez ms.
Gracias!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
16 de 22 10/20/2014 4:07 PM
-
2Iniciesesinparavotar
"Luis_Escobar" escribi:
> Los obtuve del SqlServer, resultado de una cosulta de seleccion,
> click derecho sobre el resultado mostrado, guardar resultado como?...
>
No hubiera estado de ms que eso mismo lo hubieses indicado desde un primer momento. :-(
Si has obtenido los datos de esa manera, el archivo tiene una codificacin UTF-8, al menos esa es la
codificiacin que yo obtenido al hacer una prueba, por tanto, es normal que no observes bien las palabras
acentuadas cuando lo abres con el ISAM de texto del motor de datos Microsoft Jet o Microsoft ACE, da
igual.
Y la solucin ya te la he dado anteriormente: abre el archivo con el Bloc de Notas, seleccionas Guardar
cmo, modificas la codificacin a ANSI, y lo guardas con otro nombre, o lo sobrescribes si as lo crees
conveniente.
> Ahora lo que me esta impidiendo "Actualizar" mi tabla, es el primer
> registro que "NO SE CARGA", ya que la primer celda de mi control
> DataGridView se muestra esa celda vacia, y como lo que vuelco a mi
> BD es el DataTable, la regla de no permitir Nulos en mi Bd me manda
> una excepcion.
Como dices que has creado el archivo *.csv con la opcin de Guardar resultados cmo de la consulta
ejecutada dentro del entorno de SQL Server, la primera lnea del archivo NO TIENE EL NOMBRE DE LAS
COLUMNAS, por tanto, esa caracterstica se la tienes que especificar en la cadena de conexin:
' Configuramos la conexin con el archivo de texto delimitado.
'
Dim connString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\NombreCarpeta;" & _
"Extended Properties='TEXT;HDR=No;'"
Es decir:
HDR=Yes --> La primera fila contiene el nombre de los campos
HDR=No --> La primera fila NO contiene el nombre de los campos
Lo anterior ya te lo coment en otra respuesta que aparece ms arriba. Y los nombres de los campos por
defecto sern F1, F2, F3, F4, F5, etc., por lo que tienes que mapear los nombres de los campos si deseas
que se llamen de igual manera que los existentes en tu tabla de SQL Server Compact, porque de no
hacerlo, va a ser imposible que puedas exportar los datos a tu base de SQL Server Compact, o a otra de
cualquier otro tipo diferente. Para ello, tambin te coment que leyeras el siguiente artculo:
Cmo pasar datos entre diferentes orgenes de datos
Y si deseas que te aparezcan los nombres de los campos, entra en las Opciones de SQL Server
Management Studio (men Herramientas --> Opciones...) y haz las modificaciones que aparecen en la
siguiente imagen:
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
17 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
sbado, 06 de octubre de 2012 16:23
Luis_Escobar Softtek 12,265 Puntos
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... :(
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
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
18 de 22 10/20/2014 4:07 PM
-
1Iniciesesinparavotar
Responder | Citar
sbado, 06 de octubre de 2012 16:37
Enrique M. Montejo (MVP) 70,850 Puntos
"Luis_Escobar" escribi:
> 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 ...
En mi anterior mensaje te he comentado lo que tienes que hacer para que los nombres de los campos
aparezcan automticamente en el archivo de texto creado desde SQL Server Management Studio.
> ... y los nombre tal cual como se llaman en la Bd a la cual
> pretendo migrar, sin que esto resuelva mi problema ...
El problema que tienes con el archivo de texto entiendo que solamente es LA CODIFICIACIN QUE
TIENE, porque abrirlo parece ser que lo abres con el cdigo que te indiqu. Se vern mal las palabras
acentuadas, pero lo que es leer los datos se leen, mal pero se leen, por tanto, el cdigo fuente es correcto.
Lo que tienes que hacer es modificar la codificacin del archivo para que ste tenga la codificacin ANSI,
que es el valor que por defecto tiene el ISAM de texto en el parmetro CharacterSet de la clave del registro
de Windows que te indiqu, y observars cmo aparecen correctamente las palabras con acentos.
Sigo sin poder ver el contenido del archivo de texto, aunque sean las TRES PRIMERAS LNEAS, para
intentar averiguar el motivo de que no se carge la primera lnea.
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.
Editado Enrique M. Montejo MVP, Moderator sbado, 06 de octubre de 2012 16:53
Marcado como respuesta Luis_Escobar lunes, 08 de octubre de 2012 21:14
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
19 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
lunes, 08 de octubre de 2012 21:23
Luis_Escobar Softtek 12,265 Puntos
Enrique:
Siguiendo tus sugerencias de cambiar la configuracion de mi SqlServer, ademas de cambiar la codificacion
del archivo *Csv de UTF-8 a ANSI por fin logre leer los archivos correctamente, sin problemas con las
comas y sin omitir el primer registro.
Probr el resto de la codificacion y funciono en un archivo que contaba con 2565 registros "actualizando" la
tabla indicada.
El unico pdetalle es que al querer hacer un proceso con 119,500 registros, solo puedo actualizar 221 y se
demoro casi 2 hrs. Entiendo que esto ya es problema de la cantidad de registros que contenga mi archivo
*CSV.
Muchas gracias por tu tiempo, conocimiento y accesibilidad!
10-09-2012 (para ingresar los mas de 100,000 registros recorro las filas de DataGridView y voy insertando
a la tabla y todo va OK)
De nuevo muchas gracias!
Saludos desde Monterrey, N.L. Mxico Luis Escobar :D
Editado Luis_Escobar martes, 09 de octubre de 2012 18:16
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
20 de 22 10/20/2014 4:07 PM
-
0Iniciesesinparavotar
Responder | Citar
sbado, 09 de febrero de 2013 1:02
PaulithaRubi 0 Puntos
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...
Private Function GetDataFromExcel() As DataTable
Try
' Configuramos la conexin con el libro de trabajo de Excel.
'
Dim connString As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Extended Properties='TEXT;HDR=Yes;IMEX=1;';" & _
"Data Source={0}", TextBox1.Text)
Using cnn As New OleDbConnection(connString)
Dim cmd As OleDbCommand = cnn.CreateCommand()
' Seleccionamos todos los registros de la Hoja1.
'
cmd.CommandText = "SELECT * FROM [Hoja$]"
' 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
Te lo agradecere muchoooooooooooooo..
Editado PaulithaRubi sbado, 09 de febrero de 2013 1:04
Centros de desarrollo
Windows
Recursos de aprendizaje
Microsoft Virtual Academy
Channel 9
Comunidad
Foros
Blogs
Soporte tcnico
Autosoporte
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
21 de 22 10/20/2014 4:07 PM
-
Office
Visual Studio
Nokia
Microsoft Azure
Ms...
Puentes de interoperabilidad
MSDN Magazine
Codeplex
Programas
BizSpark (para nuevas empresas)
DreamSpark
Imagine Cup
Espaa (Espaol) Boletn Privacidad y cookies Trminos de uso Marcas comerciales 2014 Microsoft
Importar datos de Excel a SqlCompact https://social.msdn.microsoft.com/Forums/es-ES/2432bd49-508a-4bf3-a...
22 de 22 10/20/2014 4:07 PM