Principales respuestas
VBasic.Net - Consulta SQL cuando la condicion depende del valor de un control

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
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
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
-
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