none
一堆查询条件,我想让这些条件在等于空的条件下,就不要出现在查询语句中,请问如何实现? RRS feed

  • 问题

  • 比如说下面这段语句
    string str_Query = "select * from fscxgdzcbxsqd where date>='" + start_Time + "' and date<='" + end_Time + "' and ssbm='" + department + "' and zcmc='" + guanjianzi + "' or gzxx='" + guanjianzi + "' ";
    我想判断如果start_Time(开始时间)如果=""的话,那么在str_Query中就不要出现date='"+start_Time+"'了,我知道可以一个一个的判断,但是条件数量少还可以,要是多了就很麻烦,请问有没有一个比较好的方法呢?

       protected void btn_Query_Click(object sender, EventArgs e)
            {
                string department = ddl_Department.SelectedItem.Text;//部门
                string start_Time = txt_Starttime + "00:00:00";//开始时间
                string end_Time = txt_Endtime + "23:59:59";//结束时间
                string guanjianzi = txt_Guanjianzi.ToString();//关键字
                string str_Query = "select * from fscxgdzcbxsqd where date>='" + start_Time + "' and date<='" + end_Time + "' and ssbm='" + department + "' and zcmc='" + guanjianzi + "' or gzxx='" + guanjianzi + "' ";
                DataSet ds = new DataSet();
                using (SqlConnection conn = new SqlConnection(strConn))
                {
                    conn.Open();
                    using (SqlDataAdapter sda = new SqlDataAdapter("select * from fscxgdzcbxsqd order by date desc", conn))
                    {
                        sda.Fill(ds);
                    }
                }
                lv_Fscxgdzcsq.DataSource = ds;
                lv_Fscxgdzcsq.DataBind();
            }
    前台:
    <asp:DropDownList ID="ddl_Department" runat="server">
        </asp:DropDownList>
        <input class="Wdate" type="text" id="txt_Starttime" onfocus="WdatePicker({isShowClear:false,readOnly:true})" runat="server" />
        <input class="Wdate" type="text" id="txt_Endtime" onfocus="WdatePicker({isShowClear:false,readOnly:true})" runat="server"/>
        <asp:TextBox class="Wdate" ID="txt_Guanjianzi" runat="server" />
        <asp:Button ID="btn_Query" runat="server" Text="查询" onclick="btn_Query_Click" />
        <asp:GridView ID="lv_Fscxgdzcsq" runat="server" DataKeyNames="id"></asp:GridView>
    2009年4月16日 2:48

答案

  • 像你这种情况一般where会这样写  ('" + start_Time + "' = '' or ( '" + start_Time + "' <> '' and date>='" + start_Time + "')) 
    如果非得去掉这个条件,你也可以用 if 来判断啊

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2009年4月16日 3:56
    2009年4月16日 2:56
    版主
  • 方法有3个:
    1.可以使用判断,如果为空,就不加,类似这样
    if(start-Time=="")
    {
    sql = "xxxx";
    }
    2,也可以这样  string start_Time ="date>='" +  txt_Starttime + "00:00:00" + "' And ";


    string str_Query = "select * from fscxgdzcbxsqd where " + start_Time + " date<='" + end_Time + "' and ssbm='" + department + "' and zcmc='" + guanjianzi + "' or gzxx='" + guanjianzi + "' ";
              
    3,if(start-Time=="")
    start-Time = "1970";//设置一个最小的日期



    孟宪会
    • 已标记为答案 杜宏宇 2009年4月16日 3:56
    2009年4月16日 3:33
    版主

全部回复

  • 像你这种情况一般where会这样写  ('" + start_Time + "' = '' or ( '" + start_Time + "' <> '' and date>='" + start_Time + "')) 
    如果非得去掉这个条件,你也可以用 if 来判断啊

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2009年4月16日 3:56
    2009年4月16日 2:56
    版主
  • 方法有3个:
    1.可以使用判断,如果为空,就不加,类似这样
    if(start-Time=="")
    {
    sql = "xxxx";
    }
    2,也可以这样  string start_Time ="date>='" +  txt_Starttime + "00:00:00" + "' And ";


    string str_Query = "select * from fscxgdzcbxsqd where " + start_Time + " date<='" + end_Time + "' and ssbm='" + department + "' and zcmc='" + guanjianzi + "' or gzxx='" + guanjianzi + "' ";
              
    3,if(start-Time=="")
    start-Time = "1970";//设置一个最小的日期



    孟宪会
    • 已标记为答案 杜宏宇 2009年4月16日 3:56
    2009年4月16日 3:33
    版主