none
VBasic.Net - Consulta SQL cuando la condicion depende del valor de un control RRS feed

  • Pregunta

  • Buenos Dias, necesito mostrar en un combo los valores de una tabla ya eso lo tengo pero el tema es la condición que depende del valor de un control 

    Ejemplo si un textbox del formulario dice PERU, entonces que en el combo me muestre las personas que son de PERU, y asi sucesivamente según el pais, si dice COLOMBIA, entonces me mostrara el personal de COLOMBIA,

    como puedo lograr eso.

    Mi llenado de combobox es asi:

    Private Sub Tecnico()
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal ORDER BY ApeNom", cnx)
                Dim dr1 As New SqlDataAdapter(cmd)
                Dim dt1 As New DataTable
                dr1.Fill(dt1)
                Me.cboTecnico.DataSource = dt1
                Me.cboTecnico.DisplayMember = "ApeNom"
                Me.cboTecnico.ValueMember = "ApeNom"
                Me.cboDni.DataSource = dt1
                Me.cboDni.ValueMember = "Dni"
    
            End Using
        End Sub

    La idea es cambiar por 

    Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal WHERE Sede= .... ORDER BY ApeNom", cnx)
    donde están los puntos debe ser segun lo que el texto del control tenga.

    Espero de su colaboración.

    Gracias

    jueves, 21 de noviembre de 2019 14:31

Respuestas

  • La solucion mala pero sencilla es concatenar el valor en la sentencia:

    Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal WHERE Sede='" & textoDelControl &"' ORDER BY ApeNom", cnx)

    La solucion buena es parametrizar la sentencia:

        Private Sub Tecnico()
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal WHERE Sede=@Sede ORDER BY ApeNom", cnx)
                cmd.Parameters.AddWithValue("@Sede", textoDelControl)
                Dim dr1 As New SqlDataAdapter(cmd)
                Dim dt1 As New DataTable
                dr1.Fill(dt1)
                Me.cboTecnico.DataSource = dt1
                Me.cboTecnico.DisplayMember = "ApeNom"
                Me.cboTecnico.ValueMember = "ApeNom"
                Me.cboDni.DataSource = dt1
                Me.cboDni.ValueMember = "Dni"
            End Using
        End Sub

    Donde dice "textoDelControl" hay que poner, por ejemplo, textBox1.Text, si es que asi se llama el control. Pero si es un combo en lugar de un textbox es un poco mas complicado porque el valor del control puede ser el .Text si lo han tecleado, o el .SelectedValue si han seleccionado desde la lista desplegable.


    • Editado Alberto PoblacionMVP jueves, 21 de noviembre de 2019 14:49
    • Propuesto como respuesta Alesx de Souza jueves, 21 de noviembre de 2019 14:59
    • Marcado como respuesta SUSPENDX2 jueves, 21 de noviembre de 2019 15:02
    jueves, 21 de noviembre de 2019 14:47

Todas las respuestas

  • La solucion mala pero sencilla es concatenar el valor en la sentencia:

    Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal WHERE Sede='" & textoDelControl &"' ORDER BY ApeNom", cnx)

    La solucion buena es parametrizar la sentencia:

        Private Sub Tecnico()
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                Dim cmd As New SqlCommand("Select Dni,ApeNom FROM Personal WHERE Sede=@Sede ORDER BY ApeNom", cnx)
                cmd.Parameters.AddWithValue("@Sede", textoDelControl)
                Dim dr1 As New SqlDataAdapter(cmd)
                Dim dt1 As New DataTable
                dr1.Fill(dt1)
                Me.cboTecnico.DataSource = dt1
                Me.cboTecnico.DisplayMember = "ApeNom"
                Me.cboTecnico.ValueMember = "ApeNom"
                Me.cboDni.DataSource = dt1
                Me.cboDni.ValueMember = "Dni"
            End Using
        End Sub

    Donde dice "textoDelControl" hay que poner, por ejemplo, textBox1.Text, si es que asi se llama el control. Pero si es un combo en lugar de un textbox es un poco mas complicado porque el valor del control puede ser el .Text si lo han tecleado, o el .SelectedValue si han seleccionado desde la lista desplegable.


    • Editado Alberto PoblacionMVP jueves, 21 de noviembre de 2019 14:49
    • Propuesto como respuesta Alesx de Souza jueves, 21 de noviembre de 2019 14:59
    • Marcado como respuesta SUSPENDX2 jueves, 21 de noviembre de 2019 15:02
    jueves, 21 de noviembre de 2019 14:47
  • Muchas Gracias, déjame acomodar algo que no me sale bien y te valido la respuesta.

    Elegi la parametrizada ya que asi es casi el resto. Habia echo algo similar pero no me salía. 

    Te agradezco tu aporte.

    • Editado SUSPENDX2 jueves, 21 de noviembre de 2019 15:02
    • Propuesto como respuesta Pablo Rubio jueves, 21 de noviembre de 2019 16:19
    • Votado como útil SUSPENDX2 jueves, 28 de noviembre de 2019 17:03
    jueves, 21 de noviembre de 2019 14:59