none
Guardar Valor De Un Checkbox En Un Campo De Una BD SQL RRS feed

  • Pregunta

  • Hola buen dia ojala y puedan ayudarme, mi problema es:

    Tengo programa en vb.net conectado a una BD Sql desde el programa llamo un procedimiento almacenado para llenar cierta tabla, todos los campos en el programa son TextBox pero quiero cambiar algunos a CheckBox ya que en esos campos solo seria seleccionar si ese valor esta presente o no, me podrian ayudar este es mi procedimiento:

    cnn = New SqlConnection(conexion)
                cnn.Open()
                cmd = New SqlCommand("alttroq", cnn)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add("@supfr", SqlDbType.Float).Value = TextBox_supfr.Text
                cmd.Parameters.Add("@suplr", SqlDbType.Float).Value = TextBox_suplr.Text
                cmd.Parameters.Add("@inffr", SqlDbType.Float).Value = TextBoxinffr.Text
                cmd.Parameters.Add("@inflr", SqlDbType.Float).Value = TextBoxinflr.Text
                cmd.Parameters.Add("@h", SqlDbType.Float).Value = TextBoxh.Text
                cmd.Parameters.Add("@pessup", SqlDbType.Float).Value = TextBoxPsup.Text
                cmd.Parameters.Add("@pestot", SqlDbType.Float).Value = TextBoxpestot.Text
                cmd.Parameters.Add("@ranvpr1", SqlDbType.Float).Value = TextBox6.Text
                cmd.Parameters.Add("@ranvpr2", SqlDbType.Float).Value = TextBox7.Text
                cmd.Parameters.Add("@ranlwr1", SqlDbType.Float).Value = TextBox8.Text
                cmd.Parameters.Add("@ranlwr2", SqlDbType.Float).Value = TextBox9.Text
                cmd.Parameters.Add("@salm1", SqlDbType.VarChar).Value = TextBox10.Text
                cmd.Parameters.Add("@salm2", SqlDbType.VarChar).Value = TextBox11.Text
                cmd.Parameters.Add("@salm3", SqlDbType.VarChar).Value = TextBox12.Text
                cmd.Parameters.Add("@salscrp", SqlDbType.VarChar).Value = TextBox13.Text
                cmd.Parameters.Add("@fech", SqlDbType.DateTime).Value = DateTimePicker1.Text
                cmd.Parameters.Add("@numtro", SqlDbType.Int).Value = CInt(TextBox15.Text)
                cmd.Parameters.Add("@dimfr", SqlDbType.Float).Value = TextBox16.Text
                cmd.Parameters.Add("@dimlr", SqlDbType.Float).Value = TextBox17.Text
                cmd.Parameters.Add("@dimh", SqlDbType.Float).Value = TextBox18.Text
                cmd.Parameters.Add("@dimpes", SqlDbType.Float).Value = TextBox19.Text
                cmd.Parameters.Add("@cpdovprlh", SqlDbType.Float).Value = TextBox20.Text
                cmd.Parameters.Add("@cpdovprrh", SqlDbType.Float).Value = TextBox21.Text
                cmd.Parameters.Add("@cpdolwrlh", SqlDbType.Float).Value = TextBox22.Text
                cmd.Parameters.Add("@cpdolwrrh", SqlDbType.Float).Value = TextBox23.Text
                cmd.Parameters.Add("@pcafr", SqlDbType.Float).Value = TextBox24.Text
                cmd.Parameters.Add("@pcalr", SqlDbType.Float).Value = TextBox25.Text
                cmd.Parameters.Add("@pcah", SqlDbType.Float).Value = TextBox26.Text
                cmd.Parameters.Add("@pcapes", SqlDbType.Float).Value = TextBox27.Text
                cmd.Parameters.Add("@plavprlh", SqlDbType.Float).Value = TextBox28.Text
                cmd.Parameters.Add("@plavprrh", SqlDbType.Float).Value = TextBox29.Text
                cmd.Parameters.Add("@plalwrlh", SqlDbType.Float).Value = TextBox30.Text
                cmd.Parameters.Add("@plalwrrh", SqlDbType.Float).Value = TextBox31.Text
                cmd.ExecuteNonQuery()
                MessageBox.Show("Datos Guardados")
                TextBox_supfr.Text = ""
                TextBox_suplr.Text = ""
                TextBoxinffr.Text = ""
                TextBoxinflr.Text = ""
                TextBoxh.Text = ""
                TextBoxPsup.Text = ""
                TextBoxpestot.Text = ""
                TextBox6.Text = ""
                TextBox7.Text = ""
                TextBox8.Text = ""
                TextBox9.Text = ""
                TextBox10.Text = ""
                TextBox11.Text = ""
                TextBox12.Text = ""
                TextBox13.Text = ""
                TextBox15.Text = ""
                TextBox16.Text = ""
                TextBox17.Text = ""
                TextBox18.Text = ""
                TextBox19.Text = ""
                TextBox20.Text = ""
                TextBox21.Text = ""
                TextBox22.Text = ""
                TextBox23.Text = ""
                TextBox24.Text = ""
                TextBox25.Text = ""
                TextBox26.Text = ""
                TextBox27.Text = ""
                TextBox28.Text = ""
                TextBox29.Text = ""
                TextBox30.Text = ""
                TextBox31.Text = ""


    Cristian Murillo

    jueves, 22 de febrero de 2018 17:08

Respuestas

  • Hola JuanAurich23,

    Si vas a guardar el valor de un control 'CheckBox' en tu base de datos sería recomendable que el tipo de columna sea BIT el cuál almacenaría 0 (false) y 1 (true) lo que representa a un tipo Bolean en VB.Net, por lo que para enviar el valor del CheckBox solo bastaría con utilizar la propiedad Checked el cual retorna 'True' si está activado y 'False' si no lo está.

    cmd.Parameters.Add("@check1", SqlDbType.Bit).Value = CheckBox1.Checked

    Por otro lado, si quieres limpiar todos los controles TextBox de tu formulario podrías utilizar :

    'Recorrer todos los controles TextBox y asignarles 'vacío' como valor
    For Each txt As TextBox In Controls.OfType(Of TextBox)
        txt.Text = String.Empty
    Next

    Así evitas estar asignándo el valor "" a cada TextBox.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta JuanAurich23 jueves, 22 de febrero de 2018 17:35
    jueves, 22 de febrero de 2018 17:27
  • Seria asi:

    cmd.Parameters.Add("@elNombreQueSea", SqlDbType.Bit).Value = CheckBox1.Checked

    Es decir, fijate que el parametro es de tipo Bit (que es lo que se usa en SqlServer para guardar un booleano, y le pasamos el .Checked del checkbox, que te devuelve un booleano indicando si el checkbox esta marcado.
    Obviamente, en la base de datos y en el procedimiento almacenado el tipo del campo tendra que coincidir con el tipo Bit, para que esto funcione.

    • Marcado como respuesta JuanAurich23 jueves, 22 de febrero de 2018 17:35
    jueves, 22 de febrero de 2018 17:27

Todas las respuestas

  • Hola JuanAurich23,

    Si vas a guardar el valor de un control 'CheckBox' en tu base de datos sería recomendable que el tipo de columna sea BIT el cuál almacenaría 0 (false) y 1 (true) lo que representa a un tipo Bolean en VB.Net, por lo que para enviar el valor del CheckBox solo bastaría con utilizar la propiedad Checked el cual retorna 'True' si está activado y 'False' si no lo está.

    cmd.Parameters.Add("@check1", SqlDbType.Bit).Value = CheckBox1.Checked

    Por otro lado, si quieres limpiar todos los controles TextBox de tu formulario podrías utilizar :

    'Recorrer todos los controles TextBox y asignarles 'vacío' como valor
    For Each txt As TextBox In Controls.OfType(Of TextBox)
        txt.Text = String.Empty
    Next

    Así evitas estar asignándo el valor "" a cada TextBox.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta JuanAurich23 jueves, 22 de febrero de 2018 17:35
    jueves, 22 de febrero de 2018 17:27
  • Seria asi:

    cmd.Parameters.Add("@elNombreQueSea", SqlDbType.Bit).Value = CheckBox1.Checked

    Es decir, fijate que el parametro es de tipo Bit (que es lo que se usa en SqlServer para guardar un booleano, y le pasamos el .Checked del checkbox, que te devuelve un booleano indicando si el checkbox esta marcado.
    Obviamente, en la base de datos y en el procedimiento almacenado el tipo del campo tendra que coincidir con el tipo Bit, para que esto funcione.

    • Marcado como respuesta JuanAurich23 jueves, 22 de febrero de 2018 17:35
    jueves, 22 de febrero de 2018 17:27
  • Gracias, disculpa y esto a que se debera? 

    Cristian Murillo

    jueves, 22 de febrero de 2018 18:16
  • Lo del OfType no tiene nada que ver con la base de datos. Se debe a que estás llamando al extensor Linq "OfType", pero no has hecho el Imports de System.Linq y por eso no te reconoce el extensor.
    jueves, 22 de febrero de 2018 18:36
  • Hola JuanAurich23,

    Al parecer no estás haciendo referencia a Linq.

    Tienes que agregar el import correspondiente : Imports System.Linq

    Ten en cuenta que tienes que estar trabajando con un FrameWork 3.5 o mayor para que esto funcione, ya que Linq está disponible desde esa versión, en caso uses un versión inferior tendrías que hacer :

    For Each ctrl As Control In Controls
        If TypeOf ctrl Is TextBox Then
           ctrl.Text = String.Empty
        End If
    Next

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 22 de febrero de 2018 18:39