none
Filtros de Búsqueda con fechas asp.net C# sql server RRS feed

  • Pregunta

  • Hola estoy trabajando en una pagina  en asp.net c# con sql server y necesito sacar un reportes utilizando lo siguientes campos de busqueda de la foto

    SELECT * FROM ESTUDIANTES where FECHA_SISTEMA BETWEEN Convert(datetime,'" + TextBox2.Text + "')and Convert(datetime,'" + TextBox4.Text + "')"

    tengo asi la consulta pero quiero agregar los demás campos en la busqueda

    SELECT * FROM ESTUDIANTES where FECHA_SISTEMA BETWEEN Convert(datetime,'" + TextBox2.Text + "')and Convert(datetime,'" + TextBox4.Text + "')"
    Gracias espero y me puedan ayudar 

    sábado, 20 de octubre de 2018 15:05

Respuestas

  • Buenas,

    Para concatenar varios filtros, puedes aplicar la estrategia:
    (filtro1 is null or columna1 = filtro1) and (filtro2 is null or columna2 = filtro2) and ...

    De este modo, si un filtro esta vació, no se aplica al indicarsele un true, y sigue con los demás filtros. 

    Por otro lado, jamas concatenes strings que sean entradas de usuario en tu sentencia, ya que permite inyección de código SQL, y ademas es una mala practica.  Para lo que tu planteas, podrías hacerlo así:

    command = new SqlCommand("SELECT * FROM ESTUDIANTES where (@inicio is null or FECHA_SISTEMA >= @inicio) and (@fin is null or FECHA_SISTEMA <= @fin) and (@inicio is null or FECHA_SISTEMA >= @inicio) and (@matricula is null or columnaMatricula = @matricula)", con);
    
    if (string.IsNullOrWhiteSpace(TextBoxMatricula.Text))
        command.Parameters.AddWithValue("@matricula", DBNull.Value);
    else
        command.Parameters.AddWithValue("@referencia", TextBoxMatricula.Text);
    if (string.IsNullOrWhiteSpace(TextBox2.Text))
        command.Parameters.AddWithValue("@inicio", DBNull.Value);
    else
        command.Parameters.AddWithValue("@inicio", TextBox2.Text);
    if (string.IsNullOrWhiteSpace(TextBox4.Text))
        command.Parameters.AddWithValue("@fin", DBNull.Value);
    else
        command.Parameters.AddWithValue("@fin", TextBox4.Text);

    Y así ir añadiendo los filtros que ta vaya haciendo falta hasta completar tu sentencia siguiendo el patrón de (@item is null or columna = @item) y añadiendo los parámetros que hagan falta

    Si tienes dudas nos comentas

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    Mi Blog


    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    sábado, 20 de octubre de 2018 18:35

Todas las respuestas

  • Buenas,

    Para concatenar varios filtros, puedes aplicar la estrategia:
    (filtro1 is null or columna1 = filtro1) and (filtro2 is null or columna2 = filtro2) and ...

    De este modo, si un filtro esta vació, no se aplica al indicarsele un true, y sigue con los demás filtros. 

    Por otro lado, jamas concatenes strings que sean entradas de usuario en tu sentencia, ya que permite inyección de código SQL, y ademas es una mala practica.  Para lo que tu planteas, podrías hacerlo así:

    command = new SqlCommand("SELECT * FROM ESTUDIANTES where (@inicio is null or FECHA_SISTEMA >= @inicio) and (@fin is null or FECHA_SISTEMA <= @fin) and (@inicio is null or FECHA_SISTEMA >= @inicio) and (@matricula is null or columnaMatricula = @matricula)", con);
    
    if (string.IsNullOrWhiteSpace(TextBoxMatricula.Text))
        command.Parameters.AddWithValue("@matricula", DBNull.Value);
    else
        command.Parameters.AddWithValue("@referencia", TextBoxMatricula.Text);
    if (string.IsNullOrWhiteSpace(TextBox2.Text))
        command.Parameters.AddWithValue("@inicio", DBNull.Value);
    else
        command.Parameters.AddWithValue("@inicio", TextBox2.Text);
    if (string.IsNullOrWhiteSpace(TextBox4.Text))
        command.Parameters.AddWithValue("@fin", DBNull.Value);
    else
        command.Parameters.AddWithValue("@fin", TextBox4.Text);

    Y así ir añadiendo los filtros que ta vaya haciendo falta hasta completar tu sentencia siguiendo el patrón de (@item is null or columna = @item) y añadiendo los parámetros que hagan falta

    Si tienes dudas nos comentas

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    Mi Blog


    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    sábado, 20 de octubre de 2018 18:35
  • te agradezco Jorge Turrado me has ayudado a quedado como lo necesitaba 
    saludos.
    sábado, 20 de octubre de 2018 20:54