Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: irvincnt93 en 27 Febrero 2015, 01:36 am



Título: Cómo hago una búsqueda inteligente con una sentencia sql y en c#?
Publicado por: irvincnt93 en 27 Febrero 2015, 01:36 am
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
  1. public void cargarActas()
  2.        {
  3.            string cadenaconexion = @"Data Source=IRVIN-PC;Initial Catalog=itiz;Integrated Security=True";
  4.            SqlConnection conexion = new SqlConnection();
  5.            SqlCommand comando = new SqlCommand();
  6.            SqlDataReader dr;
  7.            conexion.ConnectionString = cadenaconexion;
  8.            comando.Connection = conexion;
  9.            comando.CommandText = "select idacta, PE.nombrePeriodo, DE.nombreDpto, MA.nombreMateria, PR.nombreProfesor, TS.nombreTipoSemestre, grupo, clave, folio, ruta " +
  10.                                   "from Actas A join Periodos PE on A.idperi = PE.idperi " +
  11.                                   "join Departamentos DE on A.iddpto = DE.iddpto " +
  12.                                   "join Materias MA on A.idmate = MA.idmate " +
  13.                                   "join Profesores PR on A.idprofe = PR.idprofe " +
  14.                                   "join TipoSemestre TS on A.idtiposem = TS.idtiposem " +
  15.                                   "where idperi= '" + comboBox1.SelectedValue + "' and iddpto= '" + comboBox2.SelectedValue + "' and idmate= '" + comboBox3.SelectedValue + "' and idprofe= '" + comboBox3.SelectedValue + "'  and idtiposem= '" + comboBox3.SelectedValue + "' and idgrupo= '" + comboBox3.SelectedValue + "'";
  16.  
  17.  
  18.  
  19.            comando.CommandType = CommandType.Text;
  20.            conexion.Open();
  21.            dgvActas.Rows.Clear();
  22.            dr = comando.ExecuteReader();
  23.  
  24.            while (dr.Read())
  25.            {
  26.                int renglon = dgvActas.Rows.Add();
  27.                dgvActas.Rows[renglon].Cells["id_acta"].Value = dr.GetInt32(dr.GetOrdinal("idacta")).ToString();
  28.                dgvActas.Rows[renglon].Cells["id_peri"].Value = dr.GetString(dr.GetOrdinal("nombrePeriodo"));
  29.                dgvActas.Rows[renglon].Cells["id_dpto"].Value = dr.GetString(dr.GetOrdinal("nombreDpto"));
  30.                dgvActas.Rows[renglon].Cells["id_mate"].Value = dr.GetString(dr.GetOrdinal("nombreMateria"));
  31.                dgvActas.Rows[renglon].Cells["id_profe"].Value = dr.GetString(dr.GetOrdinal("nombreProfesor"));
  32.                dgvActas.Rows[renglon].Cells["id_tiposem"].Value = dr.GetString(dr.GetOrdinal("nombreTipoSemestre"));
  33.                dgvActas.Rows[renglon].Cells["grupo"].Value = dr.GetString(dr.GetOrdinal("grupo"));
  34.                dgvActas.Rows[renglon].Cells["clave"].Value = dr.GetString(dr.GetOrdinal("clave"));
  35.                dgvActas.Rows[renglon].Cells["folio"].Value = dr.GetString(dr.GetOrdinal("folio"));
  36.                dgvActas.Rows[renglon].Cells["ruta"].Value = dr.GetString(dr.GetOrdinal("ruta"));
  37.            }
  38.  
  39.  
  40.            conexion.Close();
  41.        }
  42.  
  43.  


Título: Re: Cómo hago una búsqueda inteligente con una sentencia sql y en c#?
Publicado por: FOXAR en 2 Marzo 2015, 22:21 pm
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.


Título: Re: Cómo hago una búsqueda inteligente con una sentencia sql y en c#?
Publicado por: Eleкtro en 3 Marzo 2015, 00:05 am
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 (http://sourceforge.net/projects/sqleo/)

Una aplicación comercial excelente:
Active Query Builder .NET WinForms Edition (http://www.activequerybuilder.com/product_winforms.html)

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.dbschema.com/database-query-builder.html)
http://www.youtube.com/watch?v=fXPAC9l5ZPo

Espero que te sirva de algo,
Saludos