none
Como usar dos textBox para una consulta SQL usando AND RRS feed

  • Pregunta

  • hola a todos muchas gracias por su atencion, estoy comenzando a programar en C# con Visual Studio, he realizado una conexion a la base de datos, la tabla de la base de datos la muestro en un DataGridView para depues poder aplicar un filtro con un textBox, el problema que tengo es que ahora quiero hacer un filtro con dos TextBox pero no puedo encontrar el uso correcto para usar el AND dentro de la sentencia SQL, el codigo para el filtro es el siguiente:

    cmd.CommandText = "SELECT * FROM alumnos where nombre = ('" + textBox1.Text + "')";

    para hacer el siguiente filtro con el segundo textbox intente de esta forma:


    cmd.CommandText = "SELECT * FROM alumnos where nombre = ('" + textBox1.Text + "') AND edad = ('" + textBox1.Text + "') ";

    tambien intente cambiando AND por & pero no resulto, si estoy en algun error o me hace falt algo espero me puedan ayudar, les comparto el codigo completo a partir de la apertura de la conexion:

    con.Open();

                SqlCommand cmd = con.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT * FROM alumnos where nombre = ('" + textBox1.Text + "')";
                cmd.ExecuteNonQuery();

                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);

                da.Fill(dt);
                dataGridView1.DataSource = dt;

    con.Close();

    viernes, 8 de mayo de 2015 19:09

Respuestas

  • Puedes hacer de la siguiente manera:

    Aclaro que en postgres se usa ilike para que te traiga los datos que estan con Mayuscula y minuslcas. No es igual que sqlServer que solo usa like

    Podes usar coalesce con ilike :

    1)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%Carlos','') and coalesce(edad,'') = coalesce('%','')

    Te retornara: Todos los alumnos con nombre Carlos

    2)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%','') and coalesce(edad,'') = coalesce('%20','')

    Te retornara: Todos los alumnos que tengan 20 años

    3)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%Carlos','') and coalesce(edad,'') = coalesce('%20','')

    Te retornara: Todos los alumnos que  se llamen Carlos y que tengan 20 años

    Privare void BuscarLumnos()
    {
      con.Open();
    
                
               SqlCommand cmd = con.CreateCommand();
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = "SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%" + textBox1.Text + "','') and coalesce(edad,'') =coalesce('%" + textBox1.Text + "','')";
               cmd.ExecuteNonQuery();
    
               DataTable dt = new DataTable();
               SqlDataAdapter da = new SqlDataAdapter(cmd);
    
               da.Fill(dt);
               dataGridView1.DataSource = dt;
    
               con.Close();
    }

    -----------------------------------------------------------------------------------------
    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/


    viernes, 8 de mayo de 2015 21:24

Todas las respuestas

  • Hola Vilag pero en que momento piensas usar el segundo Textbox creo deberías tener un control checkbox para poder habilitar el uso del segundo textboxt para ejecutar el segundo query que te permite filtrar con los 2 TextBoxt.

    Saludos.

    viernes, 8 de mayo de 2015 19:36
    • hola muchas gracias por interesarte en el tema, el segundo TextBox lo quero usar cuando quiera realizar un filtro con dos valores o por dos condiciones la primera seria que se cumpla el valor en el TextBox1 y el segundo el valor del textBox2 por ejemplo quiero ver en la tabla todos los que se llamen Carlos (textbox1) y que tengan 20 años de edad(textBox2) lo que hasta ahora he logrado hacer es que mientras se van capturando los datos en el texbox1 se va realizando el primer filtro el problema empieza cuando quiero usar el textBox2  para un segundo filtro, quiza me falto mencionar que el codigo lo tengo dentro de un evento KeyUp del TextBox1 aqui te comparto el codigo que tengo en donde hago solo un filtro, que le faltaria para hacer el segundo filtro? entiendo que aun no agrego el codigo para jalar el valor del textbox2 solo que no se a donde ponerlo o como hacer que funcione.

      private void textBox1_KeyUp(object sender, KeyEventArgs e)
              {

                 con.Open();

                  
                 SqlCommand cmd = con.CreateCommand();
                 cmd.CommandType = CommandType.Text;
                 cmd.CommandText = "SELECT * FROM alumnos where nombre = ('" + textBox1.Text + "')";
                 cmd.ExecuteNonQuery();

                 DataTable dt = new DataTable();
                 SqlDataAdapter da = new SqlDataAdapter(cmd);

                 da.Fill(dt);
                 dataGridView1.DataSource = dt;

                 con.Close();

              }

      me gustaria que los campos para los datos del filtro estuvieran siempre activos y aunque no se introduzcan datos en alguno de ellos no afecte el filtro.

      Saludos

    viernes, 8 de mayo de 2015 20:16
  • Hola en tu anterior post te respondí con el siguiente código:

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
            {
    	   //Si el checbox esta activado filtrara por ambos textbox
    	   if(CheckBox01.Checked == true)
    	   {
                con.Open();  
               NpgsqlCommand cmd = con.CreateCommand();
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = "SELECT * FROM aforo where aforonum = ('" + textBox1.Text + "') and sentido = ('" + textBox2.Text + "')";
               cmd.ExecuteNonQuery();
    
               DataTable dt = new DataTable();
               NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
    
               da.Fill(dt);
               dataGridView1.DataSource = dt;
    
               con.Close();
    
    	   }
    
    	   //Si el checkBox esta desactivo solo filtra por el primer textbox
    	   else if(CheckBox01.Checked == false)
    	   {
               con.Open();  
               NpgsqlCommand cmd = con.CreateCommand();
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = "SELECT * FROM aforo where aforonum = ('" + textBox1.Text + "')";
               cmd.ExecuteNonQuery();
    
               DataTable dt = new DataTable();
               NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
    
               da.Fill(dt);
               dataGridView1.DataSource = dt;
    
               con.Close();
    	   }
            }

    Espero haberte ayudado.


    viernes, 8 de mayo de 2015 20:26
  • Hola muchas gracias si muchas gracias intente usar el codigo que me mandaste pero no logre hacer que funcionara no se en que me habre equivocado lo que hice fue quitar mi codigo de el textbox1 y puse el que me mandaste y si me hace el filtro pero solo para el primer campo pero activando la casilla y metiendo datos al segundo campo ya no me hace el filtro.

    Saludos

    viernes, 8 de mayo de 2015 21:17
  • Puedes hacer de la siguiente manera:

    Aclaro que en postgres se usa ilike para que te traiga los datos que estan con Mayuscula y minuslcas. No es igual que sqlServer que solo usa like

    Podes usar coalesce con ilike :

    1)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%Carlos','') and coalesce(edad,'') = coalesce('%','')

    Te retornara: Todos los alumnos con nombre Carlos

    2)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%','') and coalesce(edad,'') = coalesce('%20','')

    Te retornara: Todos los alumnos que tengan 20 años

    3)SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%Carlos','') and coalesce(edad,'') = coalesce('%20','')

    Te retornara: Todos los alumnos que  se llamen Carlos y que tengan 20 años

    Privare void BuscarLumnos()
    {
      con.Open();
    
                
               SqlCommand cmd = con.CreateCommand();
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = "SELECT * FROM alumnos where coalesce(nombre,'') ilike coalesce('%" + textBox1.Text + "','') and coalesce(edad,'') =coalesce('%" + textBox1.Text + "','')";
               cmd.ExecuteNonQuery();
    
               DataTable dt = new DataTable();
               SqlDataAdapter da = new SqlDataAdapter(cmd);
    
               da.Fill(dt);
               dataGridView1.DataSource = dt;
    
               con.Close();
    }

    -----------------------------------------------------------------------------------------
    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/


    viernes, 8 de mayo de 2015 21:24
  • Hola muchas gracias, este codigo lo pongo en el evento KeyUp del TextBox1? o en que parte del codigo, supongo que en la parte del SELECT va primero TextBox1 y despues TextBox2 o asi como esta es correcto? perdon soy nuevo en esto espero poco a poco ir entendiendo.

    Muchas gracias, Saludos

    lunes, 11 de mayo de 2015 14:54