Cómo hago una búsqueda inteligente con una sentencia sql y en c#?

Iniciado por irvincnt93, 27 Febrero 2015, 01:36 AM

0 Miembros y 1 Visitante están viendo este tema.

irvincnt93

hola colegas necesito de su ayuda, tengo esta sentencia donde muestro una tabla actas unida a varias actas más. La ayuda que quiero es en el where, cómo ponerla en código c#, los valores en que selecciono en combobox son los que comparo en el where con cada id de mis tablas para hacer la búsqueda respectiva.

en mi Form tengo 6 combobox y los 6 están en mi comparación dentro del where para la comparación, pero en este caso esta mal para lo que quiero.

lo que pretendo es que haga varias tipos de búsquedas (o búsqueda inteligente o como se llame) ya sea que solo con el combobox de Departamentos (iddpto) y el de Materia (idmate) me muestre todos los valores que está en mi consulta. Pero después otra búsqueda con la comparación de con Periodo (idperi) con Departamento y con el grupo (grupo) y todas las combinaciones que se pueda.

un maestro me comentó que para hacer esto lo podía hacer de esta forma, que el comando.commandText lo meta en varios if anidados, la verdad no tengo idea de como.

ayuda porfis...


Código (csharp) [Seleccionar]

public void cargarActas()
       {
           string cadenaconexion = @"Data Source=IRVIN-PC;Initial Catalog=itiz;Integrated Security=True";
           SqlConnection conexion = new SqlConnection();
           SqlCommand comando = new SqlCommand();
           SqlDataReader dr;
           conexion.ConnectionString = cadenaconexion;
           comando.Connection = conexion;
           comando.CommandText = "select idacta, PE.nombrePeriodo, DE.nombreDpto, MA.nombreMateria, PR.nombreProfesor, TS.nombreTipoSemestre, grupo, clave, folio, ruta " +
                                  "from Actas A join Periodos PE on A.idperi = PE.idperi " +
                                  "join Departamentos DE on A.iddpto = DE.iddpto " +
                                  "join Materias MA on A.idmate = MA.idmate " +
                                  "join Profesores PR on A.idprofe = PR.idprofe " +
                                  "join TipoSemestre TS on A.idtiposem = TS.idtiposem " +
                                  "where idperi= '" + comboBox1.SelectedValue + "' and iddpto= '" + comboBox2.SelectedValue + "' and idmate= '" + comboBox3.SelectedValue + "' and idprofe= '" + comboBox3.SelectedValue + "'  and idtiposem= '" + comboBox3.SelectedValue + "' and idgrupo= '" + comboBox3.SelectedValue + "'";
                                   
                                   

           comando.CommandType = CommandType.Text;
           conexion.Open();
           dgvActas.Rows.Clear();
           dr = comando.ExecuteReader();

           while (dr.Read())
           {
               int renglon = dgvActas.Rows.Add();
               dgvActas.Rows[renglon].Cells["id_acta"].Value = dr.GetInt32(dr.GetOrdinal("idacta")).ToString();
               dgvActas.Rows[renglon].Cells["id_peri"].Value = dr.GetString(dr.GetOrdinal("nombrePeriodo"));
               dgvActas.Rows[renglon].Cells["id_dpto"].Value = dr.GetString(dr.GetOrdinal("nombreDpto"));
               dgvActas.Rows[renglon].Cells["id_mate"].Value = dr.GetString(dr.GetOrdinal("nombreMateria"));
               dgvActas.Rows[renglon].Cells["id_profe"].Value = dr.GetString(dr.GetOrdinal("nombreProfesor"));
               dgvActas.Rows[renglon].Cells["id_tiposem"].Value = dr.GetString(dr.GetOrdinal("nombreTipoSemestre"));
               dgvActas.Rows[renglon].Cells["grupo"].Value = dr.GetString(dr.GetOrdinal("grupo"));
               dgvActas.Rows[renglon].Cells["clave"].Value = dr.GetString(dr.GetOrdinal("clave"));
               dgvActas.Rows[renglon].Cells["folio"].Value = dr.GetString(dr.GetOrdinal("folio"));
               dgvActas.Rows[renglon].Cells["ruta"].Value = dr.GetString(dr.GetOrdinal("ruta"));
           }

         
           conexion.Close();
       }


FOXAR

bueno lo que se me ocurre es que crees una función en tu gestor de bases de datos y le mandes como parámetros los datos de tus 6 combibox y un parámetro digitado por ti que es un numero. en la función crearas los if anidados y los diferenciaras por el numero que quieras de esta manera puedes hacer las diferentes consultas.

Eleкtro

Para llevar a cabo querys complejas y muy selectivas en las que, literalmente te pierdes, puedes hecharle mano a ciertas extensiones que se integran en la IDE de VisualStudio y te hacen practicamente todo el trabajo sucio, este tipo de característica se conoce con el intuitivo nombre de SQL Query Builder.

Una aplicación opensource:
SQLeo Visual Query Builder

Una aplicación comercial excelente:
Active Query Builder .NET WinForms Edition

Y otra aplicación comercial en la que es facil encontrar el crack (solo añado el dato, ya que no está permitido pedir o publicar cracks en el foro):
DbSchema
http://www.youtube.com/watch?v=fXPAC9l5ZPo

Espero que te sirva de algo,
Saludos