none
Insert null en double mysql desde vb.net RRS feed

  • Pregunta

  • Hola, necesito insertar un registro vació en una campo double de mysql, mi código es el siguiente;

    Me.Table1TableAdapter.Insert(TextBox1.Text)

    Al intentar guardar con registro vació me dice "La conversión de la cadena "" en el tipo 'Double' no es válido"

    por lo que estuve investigando existe un código DbNull.Value que se le puede asignar pero me dice que no se puede convertir en integer, si me pueden ayudar por favor.

    viernes, 8 de enero de 2016 22:46

Respuestas

  • "Osmar Par" preguntó:

    > necesito insertar un registro vació en una campo double
    > de mysql, mi código es el siguiente;
    >
    >   Me.Table1TableAdapter.Insert(TextBox1.Text)
    >
    > Al intentar guardar con registro vació me dice "La conversión de la cadena ""
    > en el tipo 'Double' no es válido" ...

    Hola:

    Ese error lo obtienes porque estás queriendo pasar el valor de un control TextBox (que es un valor String) a un supuesto valor Double, y si el valor del control TextBox es una cadena de longitud cero (String.Empty o simplemente ""), ese valor no se puede convertir a Double, con independencia que utilices un campo Double de MySql, SQL Server, Access, o cualquier otro procedimiento que no tenga que ver con insertar un registro en una base de datos.

    Como seguramente tendrás desactivada la instrucción Option Strict (no se recomienda, lee la "coletilla" que aparece al final de éste mensaje), el error lo obtienes en tiempo de ejecución cuando ya no se puede hacer nada por corregirlo, porque deberías de saber que una cadena de longitud cero NO SE PUEDE CONVERTIR a Double.

    > ... por lo que estuve investigando existe un código DbNull.Value que se le
    > puede asignar pero me dice que no se puede convertir en integer, ...

    Por la llamada al método Insert que has indicado y que estás queriendo ejecutar, entiendo que estás haciendo uso de un objeto TableAdapter que te lo habrá generado el Asistente para configuración de orígenes de datos de Visual Studio, pero lo que ya no sé es si el tipo de dato del parámetro es Double o Integer, porque por el mensaje de error que obtienes se supone que es Double, pero ahora comentas que obtienes un error que dice que un valor DbNull.Value no se puede convertir a Integer, y efectivamente, eso no se puede hacer.

    Igualmente entiendo que el método Insert lo habrá generado el Asistente indicado, y si el campo de la tabla de MySql donde deseas insertar el valor NULL admite valores NULL, el Asistente habrá hecho bien su trabajo para enviarle un valor NULL al campo cuando al método Insert se le pase un valor del tipo Nullable(Of Double). Y esto es lo que tienes que hacer: pasarle al método Insert un valor del tipo Nullable(Of Double) cuando el valor del control TextBox1 no se pueda convertir a Double:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Declarar una variable del tipo Double
            Dim valor As Double
    
            ' Intentar convertir a Double el valor existente en el control TextBox
            Dim esValido As Boolean = Double.TryParse(TextBox1.Text, valor)
    
            Me.Table1TableAdapter.Insert(If(esValido, valor, New Double?()))
    
        End Sub

    ¿Observas el carácter de cierre de interrogación en la siguiente declaración?

        ... New Double?()

    No es un error de escritura. Ese carácter es la abreviatura de la declaración de un tipo de dato Nullable(Of T):

        ...  New Nullable(Of Double)()

    Por tanto, no tienes que pasarle al método Insert del TableAdapter un valor DbNull.Value, ya que obtendrás el mensaje de error un valor DbNull.Value no se puede convertir a Double.

    Y si por casualidad el tipo de dato del parámetro del método Insert es Integer, sustituye el tipo de dato Double por el tipo de dato Integer en el código del ejemplo anterior.

    Lo que hace falta es que estés compilando tu proyecto con la versión de Visual Basic 2005 o superior para poder utilizar tipos de datos Nullable(Of T). ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, se inteligente y activa la instrucción
    Option Strict.



    sábado, 9 de enero de 2016 8:47
    Moderador

Todas las respuestas

  • "Osmar Par" preguntó:

    > necesito insertar un registro vació en una campo double
    > de mysql, mi código es el siguiente;
    >
    >   Me.Table1TableAdapter.Insert(TextBox1.Text)
    >
    > Al intentar guardar con registro vació me dice "La conversión de la cadena ""
    > en el tipo 'Double' no es válido" ...

    Hola:

    Ese error lo obtienes porque estás queriendo pasar el valor de un control TextBox (que es un valor String) a un supuesto valor Double, y si el valor del control TextBox es una cadena de longitud cero (String.Empty o simplemente ""), ese valor no se puede convertir a Double, con independencia que utilices un campo Double de MySql, SQL Server, Access, o cualquier otro procedimiento que no tenga que ver con insertar un registro en una base de datos.

    Como seguramente tendrás desactivada la instrucción Option Strict (no se recomienda, lee la "coletilla" que aparece al final de éste mensaje), el error lo obtienes en tiempo de ejecución cuando ya no se puede hacer nada por corregirlo, porque deberías de saber que una cadena de longitud cero NO SE PUEDE CONVERTIR a Double.

    > ... por lo que estuve investigando existe un código DbNull.Value que se le
    > puede asignar pero me dice que no se puede convertir en integer, ...

    Por la llamada al método Insert que has indicado y que estás queriendo ejecutar, entiendo que estás haciendo uso de un objeto TableAdapter que te lo habrá generado el Asistente para configuración de orígenes de datos de Visual Studio, pero lo que ya no sé es si el tipo de dato del parámetro es Double o Integer, porque por el mensaje de error que obtienes se supone que es Double, pero ahora comentas que obtienes un error que dice que un valor DbNull.Value no se puede convertir a Integer, y efectivamente, eso no se puede hacer.

    Igualmente entiendo que el método Insert lo habrá generado el Asistente indicado, y si el campo de la tabla de MySql donde deseas insertar el valor NULL admite valores NULL, el Asistente habrá hecho bien su trabajo para enviarle un valor NULL al campo cuando al método Insert se le pase un valor del tipo Nullable(Of Double). Y esto es lo que tienes que hacer: pasarle al método Insert un valor del tipo Nullable(Of Double) cuando el valor del control TextBox1 no se pueda convertir a Double:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Declarar una variable del tipo Double
            Dim valor As Double
    
            ' Intentar convertir a Double el valor existente en el control TextBox
            Dim esValido As Boolean = Double.TryParse(TextBox1.Text, valor)
    
            Me.Table1TableAdapter.Insert(If(esValido, valor, New Double?()))
    
        End Sub

    ¿Observas el carácter de cierre de interrogación en la siguiente declaración?

        ... New Double?()

    No es un error de escritura. Ese carácter es la abreviatura de la declaración de un tipo de dato Nullable(Of T):

        ...  New Nullable(Of Double)()

    Por tanto, no tienes que pasarle al método Insert del TableAdapter un valor DbNull.Value, ya que obtendrás el mensaje de error un valor DbNull.Value no se puede convertir a Double.

    Y si por casualidad el tipo de dato del parámetro del método Insert es Integer, sustituye el tipo de dato Double por el tipo de dato Integer en el código del ejemplo anterior.

    Lo que hace falta es que estés compilando tu proyecto con la versión de Visual Basic 2005 o superior para poder utilizar tipos de datos Nullable(Of T). ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, se inteligente y activa la instrucción
    Option Strict.



    sábado, 9 de enero de 2016 8:47
    Moderador
  • Muchísimas gracias por el código y la explicación, me funciona perfectamente.

    Saludos

    sábado, 9 de enero de 2016 17:18