none
Problemas con DataTable y OleDbConnection RRS feed

  • Pregunta

  • Estoy leyendo datos desde un excel con OleDbConnection y se lo asigno a un datatable, el problema es que cuando inserta valores 0.0016, 0.0032, 0.0064, 0.0128, etc.. los reemplaza por un cero

    este es el codigo:

        Dim ConexionOleDB As String
    
                Select Case Extension
                    Case ".xls"
                        ConexionOleDB = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & txtArchivo.Text & ";Extended Properties='Excel 8.0;HDR=Yes'"
                    Case ".xlsx"
                        ConexionOleDB = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & txtArchivo.Text & "; Extended Properties=Excel 12.0;"
                End Select
    
                Dim connExcel As New OleDbConnection(ConexionOleDB)
    
                'obtener nombre de la primer hoja
                connExcel.Open()
                Dim dtExcelSchema As DataTable
                dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
                Dim SheetName As String = dtExcelSchema.Rows(0)("TABLE_NAME").ToString()
                connExcel.Close()
    
                Dim dt As New DataTable()
    
    
    
                Using cnn As New OleDbConnection(ConexionOleDB)
                    Try
                        Dim sql As String = "SELECT * FROM [" & SheetName & "]"
    
                        Dim da As New OleDbDataAdapter(sql, cnn)
    
                        da.Fill(dt)
                    Catch ex As Exception
                        ok = False
                        MsgBox("Error on upload the file")
                    End Try
     End Using


    Gracias Ing. Salomon Bagdadi

    jueves, 25 de octubre de 2012 20:07

Todas las respuestas

  • puede ser pod dos cosas

    - la cultura que usas en la aplicacion reconoce como separador decimal a la coma, por lo tanto en el caso de suar el punto lo intepreta de forma incorrecta

    esto se solucionaria si defines la cultura

    System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")

    eso lo poncrias al comienzo de la ejecucion

    - la otra puede ser que la celda del excel toma una precision en decimales incorrecta y este redondeando

    podrias ver si la asignacion del valor lo haces como string, o sea convierte el valor numerico a cadena antes de asignarlo, para ver si asi no quita los decimales

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 25 de octubre de 2012 23:13
  • Hola Leandro

    Ya hice lo que me dices y no encuentro el error, lo curioso es que solo pasa con los valores arriba mencionados, es decir, la hoja de excel tiene muchos valores, todos los pasa bien con su redondeo etc, solo estos valores los pasa como cero

    Alguna idea de que puede ser?


    Gracias Ing. Salomon Bagdadi

    martes, 30 de octubre de 2012 17:55
  • En un libro de excel esto sucede si se tiene configurado el formato de celda como "Numero", aunque si posiciones el cursos sobre la celda '0' en la barra de fuciones veras el valor '0.0016', podrias ver unicamente para descartar que no sea este formato el que te este dando problemas, si es asi podrias cambiarlo a "General" o "Texto".

    suerte!


    Saludos desde Monterrey, Nuevo León, México!!!

    martes, 30 de octubre de 2012 18:02
  • Gracias Luis ya lo revise y no es el formato puesto que las demas celdas tienen el mismo formato y si las respeta


    Gracias Ing. Salomon Bagdadi

    martes, 30 de octubre de 2012 19:39