none
Insertar valor decimal desde vb.net a SQL Server me guarda el mismo número RRS feed

  • Pregunta

  • Buen día tengan todos compañeros,

    tengo algunos campos que inserto desde VB.net q SQL Server con TableAdapter, pero me guarda a SQL el mismo número en todos los campos.


    Inserto los datos así, ya que tengo campos declarados decimales (NULL) en SQL que pueden quedar vacíos si el usuario no desea guardarlos:

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

    Este bloque de código lo encontré en este hilo:

    https://social.msdn.microsoft.com/Forums/es-ES/6811aefe-7b32-493c-86f7-3819a54deed2/insert-null-en-double-mysql-desde-vbnet?forum=vbes


    Ahora, funciona casi todo bien, el único detalle, y no he logrado solucionarlo, es que guarda números, y al revisarlos en SQL Server, me guarda como 7.00, independientemente de cualquier número que ingrese en el textbox.

    Tengo 6 textbox, y siempre se guarda el valor del último textbox. en los campos

    Me.Table1TableAdapter.Insert(If(esValido, valor, New Decimal?(), _
    If(esValido2, valor, New Decimal?(), _
    If(esValido3, valor, New Decimal?(), _
    If(esValido4, valor, New Decimal?(), _
    If(esValido5, valor, New Decimal?(), _
    If(esValido6, valor, New Decimal?())

    Saludos




    sábado, 17 de febrero de 2018 2:55

Respuestas

  • "Juan Ortiz T" escribió:

    > Ahora, funciona casi todo bien, el único detalle, y no he logrado solucionarlo,
    > es que guarda números, y al revisarlos en SQL Server, me guarda como 7.00,
    > independientemente de cualquier número que ingrese en el textbox.
    >
    > Tengo 6 textbox, y siempre se guarda el valor del último textbox. en los campos
    >

    Hola, Juan:

    Si en la tabla de la base de datos de SQL Server te guarda en todos los campos el valor decimal 7.00, no me queda más que pensar que el valor de la variable local llamada "valor" sea 7.

    Imagina que en el control TextBox1 hay escrito un 7. Si tú ejecutas lo siguiente:

    >    ' Declarar una variable del tipo decimal
    >    Dim valor As Decimal
    >
    >    ' Intentar convertir a decimal el valor existente en el control TextBox
    >    Dim esValido As Boolean = Decimal.TryParse(TextBox1.Text, valor)

    La variable "valor" tendrá el valor 7. Si posteriormente ejecutas:

    >    Me.Table1TableAdapter.Insert(If(esValido, valor, New Decimal?(), _
    >    If(esValido2, valor, New Decimal?(), _
    >    If(esValido3, valor, New Decimal?(), _
    >    If(esValido4, valor, New Decimal?(), _
    >    If(esValido5, valor, New Decimal?(), _
    >    If(esValido6, valor, New Decimal?())

    es normal que TODOS LOS CAMPOS tengan el valor 7, porque tú mismo así se lo estás indicando. Es como si ejecutaras:

        Me.Table1TableAdapter.Insert(If(esValido, 7, New Decimal?(), _
                                     If(esValido2, 7, New Decimal?(), _
                                     If(esValido3, 7, New Decimal?(), _
                                     If(esValido4, 7, New Decimal?(), _
                                     If(esValido5, 7, New Decimal?(), _
                                     If(esValido6, 7, New Decimal?()
                                    )

    Digo yo que si no deseas que en todos los campos aparezca el mismo número, tendrás que especificarle los valores correctos a cada campo, pero si a todos ellos le asignas el valor que actualmente tiene la variable "valor", repito que es normal que todos tengan el mismo valor. ;-)

    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.

    • Propuesto como respuesta gemma_campillo sábado, 17 de febrero de 2018 14:08
    • Marcado como respuesta Juan Ortiz T sábado, 17 de febrero de 2018 23:09
    sábado, 17 de febrero de 2018 12:41
    Moderador

Todas las respuestas

  • "Juan Ortiz T" escribió:

    > Ahora, funciona casi todo bien, el único detalle, y no he logrado solucionarlo,
    > es que guarda números, y al revisarlos en SQL Server, me guarda como 7.00,
    > independientemente de cualquier número que ingrese en el textbox.
    >
    > Tengo 6 textbox, y siempre se guarda el valor del último textbox. en los campos
    >

    Hola, Juan:

    Si en la tabla de la base de datos de SQL Server te guarda en todos los campos el valor decimal 7.00, no me queda más que pensar que el valor de la variable local llamada "valor" sea 7.

    Imagina que en el control TextBox1 hay escrito un 7. Si tú ejecutas lo siguiente:

    >    ' Declarar una variable del tipo decimal
    >    Dim valor As Decimal
    >
    >    ' Intentar convertir a decimal el valor existente en el control TextBox
    >    Dim esValido As Boolean = Decimal.TryParse(TextBox1.Text, valor)

    La variable "valor" tendrá el valor 7. Si posteriormente ejecutas:

    >    Me.Table1TableAdapter.Insert(If(esValido, valor, New Decimal?(), _
    >    If(esValido2, valor, New Decimal?(), _
    >    If(esValido3, valor, New Decimal?(), _
    >    If(esValido4, valor, New Decimal?(), _
    >    If(esValido5, valor, New Decimal?(), _
    >    If(esValido6, valor, New Decimal?())

    es normal que TODOS LOS CAMPOS tengan el valor 7, porque tú mismo así se lo estás indicando. Es como si ejecutaras:

        Me.Table1TableAdapter.Insert(If(esValido, 7, New Decimal?(), _
                                     If(esValido2, 7, New Decimal?(), _
                                     If(esValido3, 7, New Decimal?(), _
                                     If(esValido4, 7, New Decimal?(), _
                                     If(esValido5, 7, New Decimal?(), _
                                     If(esValido6, 7, New Decimal?()
                                    )

    Digo yo que si no deseas que en todos los campos aparezca el mismo número, tendrás que especificarle los valores correctos a cada campo, pero si a todos ellos le asignas el valor que actualmente tiene la variable "valor", repito que es normal que todos tengan el mismo valor. ;-)

    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.

    • Propuesto como respuesta gemma_campillo sábado, 17 de febrero de 2018 14:08
    • Marcado como respuesta Juan Ortiz T sábado, 17 de febrero de 2018 23:09
    sábado, 17 de febrero de 2018 12:41
    Moderador
  • Muchas gracias Enrique M. Montejo. Ha sido de mucha ayuda tu aporte.

    Ya lo comprendí, el detalle es declarar una variable distinta para cada TextBox, en este caso seis. Yo estaba utilizando esa misma variable para todos los campos.

    Saludos!


    domingo, 18 de febrero de 2018 0:29