none
importar tablas de excel a una base de datos sqlserver RRS feed

  • Pregunta

  • Hola Buenas...

    estoy desarrollando un sistema de web app en visual estudio 2010 es una registro de asistencia para alumnado para un proyecto, y se necesitan importar mas de 500 registros, me habían pasado un método que usaba conexiones de oledb para importarlos pero a la hora de cargar el archivo en el input file o el fileupload no tengo realmente respuesta y he estado adaptando el código de c# para visual

    Imports System.Data

    Imports System.Data.Sql

    Imports System.Data.OleDb

    Imports System.Data.SqlClient

    Partial Class IMPORTAR2

        Inherits System.Web.UI.Page

        Dim cnx As New SqlConnection("data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Database.mdf;User Instance=true")

        Public da As New OleDbDataAdapter

        Public ds As New DataSet

        Public sqlBC As SqlBulkCopy

        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

            cnx.Open()

            Dim ruta As New FileUpload

            Dim hoja As String = ""

            If ruta.FileName.ToString <> "" Then

                Dim excelfile As String = ruta.FileName.ToString

                hoja = TextBox1.HasAttributes

                Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.Oledb 12.0; data source= " & "Data Source=" & excelfile & "; " & "Extended properties=""Excel 12.0; HDR =yes;""")

                Try

                    cnn.Open()

                    da = New OleDbDataAdapter("SELECT * FROM [" & hoja & " $]", cnn)

                    ds = New DataSet

                    da.Fill(ds)

     

                    sqlBC = New SqlBulkCopy(cnx)

                    sqlBC.DestinationTableName = "alumnos"

                    sqlBC.WriteToServer(ds.Tables(0))

                Catch ex As Exception

                    System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE ='JavaScript> aleret('Error') </SCRIPT>")

                Finally

                    cnn.Close()

                End Try

            End If

    jueves, 9 de noviembre de 2017 19:05

Respuestas

Todas las respuestas

  • Hola, debería depurarlo con un punto de interrupción

    Por otro lado este proveeedor Provider=Microsoft.Jet.Oledb 12.0; Creo que no existe lo mas probable es que necesites el 

    ACE.OLEDB.12.0


    Votar es agradecer.
    Saludos.
    Lima-Perú

    jueves, 9 de noviembre de 2017 20:50
  • Veamos, así a bote pronto veo al menos dos errores graves, no sé si además habrá otros:

    1) Haces un "New FileUpload" y luego intentas leer cosas de ese FileUpload. Eso no puede funcionar, ese FileUpload siempre estará vacío, porque lo acabas de crear nuevo con el "New". Así no puedes leer los datos, es necesario usar el mismo FileUpload que pusiste en la página para que te subieran el archivo, no vale crear uno nuevo y pretender que los datos aparezcan en él mágicamente.

    2) Incluso aunque el FileUpload fuera el correcto, tienes un error de concepto al usarlo: Estás tomando el FileName del FileUpload y luego leyendo ese fichero mediante un OleDbConnection. Eso no funcionará una vez que publiques la aplicación. El FileName que llega en el FileUpload es el nombre que el fichero tenía dentro del PC del usuario que subió el fichero al servidor. Pero tu programa está funcionando en otro ordenador (el servidor) y no tiene acceso al disco del usuario, que está en una máquina distinta. Puede que te funcione en tiempo de desarrollo, mientras que estás probando el programa dentro de un PC que actúa a la vez como servidor y como navegador, pero fallará en cuanto lo pongas en producción.

    En lugar de tomar el filename del FileUpload, tienes que tomar los bytes que te llegan en el FileUpload (propiedad FileBytes), salvar esos bytes dentro de un fichero en el disco del servidor, y luego abrir ESE fichero con el OleDbConnection.


    Editado: 3) En la cadena de conexión tienes duplicado el "data source=", además de que si no me equivoco el Provider que has puesto no existe (hay ACE 12 o JET 4, pero no existe JET 12).
    jueves, 9 de noviembre de 2017 20:56
  • Hola Jesus,

    checa este link tal ves te pueda darte una idea de los que te esta faltando insertar libro de excel a sql c#

    saludos.

    • Propuesto como respuesta killer1923 jueves, 9 de noviembre de 2017 22:00
    • Votado como útil killer1923 jueves, 9 de noviembre de 2017 22:01
    • Marcado como respuesta Juan MondragónModerator martes, 14 de noviembre de 2017 16:58
    jueves, 9 de noviembre de 2017 22:00