none
Aprendiendo Programacion Vb.Net RRS feed

  • Pregunta

  • Estimados buen día, pido Por Favor su apoyo para solucionar un problema que tengo en el siguiente código:

    ERROR: "La cadena de entrada no tiene el formato correcto"

    CLASE:

    Public Class Customer

    Public Property SUBDEPTO As String
    Public Property EXISTENCIA As Single

    End Class


    LLENA EL DATAGRIDVIEW - LUEGO SE ENVIARA A UNA TABLA DE SQL:

    Dim dt As DataTable = Tables(cboSheet.SelectedItem.ToString())
    DataGridView1.DataSource = dt
    If dt IsNot Nothing Then
    Dim list As List(Of Customer= New List(Of Customer()
    For i As Integer = 0 To dt.Rows.Count - 1
    Dim Customer As Customer = New Customer()
    Customer.SUBDEPTO = dt.Rows(i)("SUBDEPTO").ToString()
    Customer.EXISTENCIA = Convert.ToSingle(dt.Rows(i)("EXISTENCIA").ToString()) 'acá genera error
    list.Add(Customer)
    Next
    CustomerBindingSource.DataSource = list
    End If


    GRACIAS A TODOS !!!!
    lunes, 19 de abril de 2021 2:05

Respuestas

  • ERROR: "La cadena de entrada no tiene el formato correcto"

    Este error casi seguro que ocurre en el Convert.ToSingle. Si es así, se debe a que el valor que tenías en el campo EXISTENCIA no se reconoce como Single. Recuerda que el método Convert.ToSingle es absolutamente estricto y no permite la más mínima variación respecto al formato que él considera que debe tener un single. Por ejemplo, usar una coma en lugar de un punto o viceversa causará un error. O incluso un simple espacio en blanco al principio o al final del valor también causará un error. También dará un error si el campo está vacío.

    Si no puedes cambiar el contenido del campo para que tenga el formato correcto, entonces lo que puedes hacer es quitar el Convert.ToSingle y en su lugar llamar a una Function escrita por ti, y en el interior de esa function meter todo el código que quieras para limpiar, modificar y convertir el valor que te llegue en ese campo.

    lunes, 19 de abril de 2021 6:14
  • Customer.EXISTENCIA = Convert.ToSingle(dt.Rows(i)("EXISTENCIA").ToString()) 'acá genera

    Customer.EXISTENCIA = Convert.ToString(dt.Rows(i)("EXISTENCIA")) 'acá genera

    lunes, 19 de abril de 2021 22:33

Todas las respuestas

  • ERROR: "La cadena de entrada no tiene el formato correcto"

    Este error casi seguro que ocurre en el Convert.ToSingle. Si es así, se debe a que el valor que tenías en el campo EXISTENCIA no se reconoce como Single. Recuerda que el método Convert.ToSingle es absolutamente estricto y no permite la más mínima variación respecto al formato que él considera que debe tener un single. Por ejemplo, usar una coma en lugar de un punto o viceversa causará un error. O incluso un simple espacio en blanco al principio o al final del valor también causará un error. También dará un error si el campo está vacío.

    Si no puedes cambiar el contenido del campo para que tenga el formato correcto, entonces lo que puedes hacer es quitar el Convert.ToSingle y en su lugar llamar a una Function escrita por ti, y en el interior de esa function meter todo el código que quieras para limpiar, modificar y convertir el valor que te llegue en ese campo.

    lunes, 19 de abril de 2021 6:14
  • Hola Mynor,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 19 de abril de 2021 13:55
    Moderador
  • Customer.EXISTENCIA = Convert.ToSingle(dt.Rows(i)("EXISTENCIA").ToString()) 'acá genera

    Customer.EXISTENCIA = Convert.ToString(dt.Rows(i)("EXISTENCIA")) 'acá genera

    lunes, 19 de abril de 2021 22:33
  • Alberto,

    Muchisimas gracias por tu respuesta, revisare el codigo para verificar tus recomendaciones y aplicarlas a dicha solucion.

    Saludos,

    Mynor G.

    Guatemala

    martes, 20 de abril de 2021 1:57
  • Eric,

    Gracias por el seguimiento. Estoy empezando en el mundo de la programacion con VB.Net 

    Revisare el codigo para aplicar las recomendaciones dadas en las respuestas. 

    Gracias a Todos !!!

    martes, 20 de abril de 2021 2:02
  • Customer.EXISTENCIA = Convert.ToString(dt.Rows(i)("EXISTENCIA")) 'acá genera

    Ojo con este. El Convert.ToString no hace nada, porque el valor que le pasas ya es un String, y por lo tanto no cambia nada al convertirlo a String. Entonces tomas ese String y se lo pasas a Customer.EXISTENCIA. SI este último campo es de tipo numérivo, entonces VB.NET hace una conversión de tipo implícita de String a Número, y en esta conversión de nuevo te topas con el problema de que si el String no contiene un número "perfecto", entonces te da el error de conversión exactamente igual que cuando escribes la conversión explícitamente.

    Si estás comenzando en VB, te recomiendo que no adquieras el defecto que lamentablemente tienen muchos programadores de VB de escribir su código permitiendo conversiones implícitas. Para evitarlo, pon al principio del programa "Option Strict On". Esto hará que te señale un error de compilación cada vez que escribas una conversión implícita como la que hemos visto arriba. Eso te fuerza a escribirla explícitamente. Aunque parezca que esto supone más trabajo de programación, porque tienes que escribir las conversiones en lugar de ser automáticas, a la larga te ahorrará trabajo poruqe evitarás los muchos errores que se introducen inadvertidamente en los programas debido a las conversiones automáticas.

    martes, 20 de abril de 2021 6:18