none
Valor DBNULL al leer Excel RRS feed

  • Pregunta

  • Hola estoy cargando en una base de sql server datos de un archivo de excel.... pero tengo el problema que los valores numericos me devuelve dbnull.... les muestro el codigo

     Dim conexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & RutaArchivo & ";Extended Properties=Excel 8.0;")
            Dim da As New OleDbDataAdapter("select * from  [Hoja1$]", conexion)
            Dim ds2 As New DataSet
            da.Fill(ds2, "Resultado")
            Dim i As Integer
            For i = 0 To ds2.Tables("Resultado").Rows.Count - 1
               messagebox.show(ds2.Tables(0).Rows(i).Item("Billete"))
                End If
            Next

    me devuelve dbnull.... probe aplicar desde el excel formato a la columna pero nada,

    gracias


    Dante Tagliavini

    jueves, 28 de junio de 2012 0:56

Respuestas

  • "Creed55" escribió:

    > El tema que nose porque me devuelve null si en las
    > celdas del excel tienen valores numericos ...

    Haz una prueba especificando el valor IMEX=1 en las propiedades extendidas de la cadena de conexión con el libro de Excel:

         Try
          Using conexion As New OleDbConnection( _
           "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Extended Properties='Excel 8.0;IMEX=1';" & _
           "Data Source=" & RutaArchivo)
           
           Dim cmd As OleDbCommand = conexion.CreateCommand()
           cmd.CommandText = "select * from  [Hoja1$]"
           
           Dim da As New OleDbDataAdapter(cmd)
           Dim dt As New DataTable("Resultado")
           da.Fill(dt)
           
           For Each row As DataRow In dt.Rows
            
            ' Obtenemos el valor del campo Billete
            '
            
            Dim value As Object = row.Item("Billete")
            If (value Is DbNull.Value) Then
             ' El valor es NULL; continuamos el bucle
             '
             Continue For
            End If
            
            ' Llegado aquí se comprende que el valor
            ' del campo NO ES NULL
            '
            MessageBox.Show(Convert.ToString(value))
            
           Next
           
          End Using
          
         Catch ex As Exception
          ' Se ha producido un error.
          MessageBox.Show(ex.Message)
          
         End Try


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, 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 instrucción Option Strict.


    viernes, 29 de junio de 2012 5:34
    Moderador

Todas las respuestas

  • podruq no usas algo como ser

    Dim conexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & RutaArchivo & ";Extended Properties=Excel 8.0;")
    Dim da As New OleDbDataAdapter("select * from  [Hoja1$]", conexion)
    Dim ds2 As New DataTable
    da.Fill(ds2)
    Dim i As Integer
    For Each row As Datarow In ds2.Rows.Count
    
    	If row("Billete") IsNot DbNull.Value Then
    		messagebox.show(CStr(row("Billete")))
    	End If
    	
    Next


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 28 de junio de 2012 1:26
  • "Creed55" escribió:

    >  messagebox.show(ds2.Tables(0).Rows(i).Item("Billete"))
    >
    > me devuelve dbnull.... probe aplicar desde el excel
    > formato a la columna pero nada,

    Hola, Dante:

    Debes de saber que los valores NULL no se pueden leer, de ahí que es misión tuya detectar los posibles valores NULL existentes en los diferentes campos del objeto DataTable y actuar en consecuencia:

       For i = 0 To ds2.Tables("Resultado").Rows.Count - 1
           ' Referenciamos la fila actual
           '
           Dim row As DataRow = ds2.Tables(0).Rows(i)
           ' Obtenemos el valor del campo Billete
           '
           Dim value As Object = row.Item("Billete")
           If (value Is DbNull.Value) Then
              ' El valor es NULL; continuamos el bucle
              '
              Continue For
           End If
           ' Llegado aquí se comprende que el valor
           ' del campo NO ES NULL
           '
           MessageBox.Show(Convert.ToString(value))
       Next

    > estoy cargando en una base de sql server datos de un archivo de excel

    Para eso no es necesario recurrir a objetos DataSet y DataTable; hay otras técnicas muchísimo más fáciles y rápidas.

    Carga masiva de datos desde Excel

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, 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 instrucción Option Strict.

    jueves, 28 de junio de 2012 6:09
    Moderador
  • hola gracias por responder... El problema es que si se lo que me dicen sobre el control de los valores nulos... si se como hacer eso. El tema que nose porque me devuelve null si en las celdas del excel tienen valores numericos que si tengo que tomar para terminar el proceso. Si no los tomo en cuenta el proceso terminara sin errores lo se, pero de nada me sirve eso. El excel tiene dos columnas solamente Billetes cantidad 100 100 50 10 20 50 10 200 5 60 2 100 1 50 0.50 1 0.25 10 0.10 3 0.05 0 0.01 0 representan lso billetes y la cantidad de esa plata. hasta el valor de peso me anda perfecto... luego lee el 0.50 y me devuelte null. saludos

    Dante Tagliavini

    jueves, 28 de junio de 2012 13:57
  • "Creed55" escribió:

    > El tema que nose porque me devuelve null si en las
    > celdas del excel tienen valores numericos ...

    Haz una prueba especificando el valor IMEX=1 en las propiedades extendidas de la cadena de conexión con el libro de Excel:

         Try
          Using conexion As New OleDbConnection( _
           "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Extended Properties='Excel 8.0;IMEX=1';" & _
           "Data Source=" & RutaArchivo)
           
           Dim cmd As OleDbCommand = conexion.CreateCommand()
           cmd.CommandText = "select * from  [Hoja1$]"
           
           Dim da As New OleDbDataAdapter(cmd)
           Dim dt As New DataTable("Resultado")
           da.Fill(dt)
           
           For Each row As DataRow In dt.Rows
            
            ' Obtenemos el valor del campo Billete
            '
            
            Dim value As Object = row.Item("Billete")
            If (value Is DbNull.Value) Then
             ' El valor es NULL; continuamos el bucle
             '
             Continue For
            End If
            
            ' Llegado aquí se comprende que el valor
            ' del campo NO ES NULL
            '
            MessageBox.Show(Convert.ToString(value))
            
           Next
           
          End Using
          
         Catch ex As Exception
          ' Se ha producido un error.
          MessageBox.Show(ex.Message)
          
         End Try


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, 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 instrucción Option Strict.


    viernes, 29 de junio de 2012 5:34
    Moderador