页面上有一个dropdownlist、一个textbox,和一个已经绑定数据的gridview,前两个主要是来设置查询条件的,点击button按钮后,按照查询条件gridview显示符合查询条件的数据信息:
其中ProntoName、Status、ModuleName都是表Pronto的字段
运行后显示‘and’附近有语法错误,各位高手请指点指点
代码如下:
   protected void Button8_Click(object sender, EventArgs e)
    {
       string sql = "select *from Pronto "; 
        if (ProntoName.Text != "")
        sql = sql + " and ProntoName like '%" + ProntoName.Text.ToString() + "%'";
        if (DropDownList1.SelectedItem.Value != "") 
          sql = sql + " and Status " + DropDownList1.SelectedValue.ToString() ;
      if (DropDownList2.SelectedItem.Value != "")
          sql = sql + " and ModuleName " + DropDownList2.SelectedValue.ToString(); 
 SqlDataSource1.SelectCommand = sql;
       dy.DataBind();     
          
        int li_row;     
        int li_rowcount = dy.Rows.Count;      
        for (int i = 0; i < li_rowcount; i++)       
        {            li_row = i + 1;      
            dy.Rows[i].Cells[1].Text = li_row.ToString();
        }    
       
        if (li_rowcount == 0)     
        {         
            Response.Write("没有找到任何记录。");      
        }

解决方案 »

  1.   

     select * from 里的*和from要有空格,而且平凑SQL语句请使用StringBuilder
    using System.Text;
    ...
    StringBuilder sb = new StringBuilder();
    sb.Append("select * from Pronto where 1=1 "); 
      if (ProntoName.Text != "")
     sb.Append(" and ProntoName like '%" + ProntoName.Text.ToString() + "%' ");
      if (DropDownList1.SelectedItem.Value != "") 
      sb.Append(" and Status " + DropDownList1.SelectedValue.ToString()) ;
      if (DropDownList2.SelectedItem.Value != "")
      sb.Append(" and ModuleName " + DropDownList2.SelectedValue.ToString());  
    SqlDataSource1.SelectCommand = sb.ToString();
      

  2.   

    恩,按照你的我改了,可是还是有一些问题,按照TextBox进行查询,可以得到查询结果,但是两个dropdownlist控件就不行了,dropdownlist1是手动设置的数据,dropdownlist2是绑定数据库的数据,查询报错:“在应使用条件的上下文(在 'New' 附近)中指定了非布尔类型的表达式。 ”
    还有,不需要 dy.DataBind(); 吗?  
      

  3.   

    恩,按照你的我改了,可是还是有一些问题,按照TextBox进行查询,可以得到查询结果,但是两个dropdownlist控件就不行了,dropdownlist1是手动设置的数据,dropdownlist2是绑定数据库的数据,查询报错:“在应使用条件的上下文(在 'New' 附近)中指定了非布尔类型的表达式。 ”
    还有,不需要 dy.DataBind(); 吗? 
      

  4.   

    少了一个where 1=1,或者where,最好用where1=1。string sql = "select *from Pronto where 1=1__";  //记得最后空格,就是我用_记录的地方
     
      

  5.   

    绝对是没问题的,不管你DropDownList控件是动态还是静态绑定都可以的,只是你取DropDownList控件值方法不对而已,你在试试看看
    using System.Text;
    ...
    StringBuilder sb = new StringBuilder();
    sb.Append("select * from Pronto where 1=1 "); 
      if (ProntoName.Text != "")
     sb.Append(" and ProntoName like '%" + ProntoName.Text.ToString() + "%' ");
      if (DropDownList1.SelectedItem.Value != "") 
      sb.Append(" and Status= '" + DropDownList1.SelectedItem.Value.ToString().Trim()+"' ") ;
      if (DropDownList2.SelectedItem.Value != "")
      sb.Append(" and ModuleName= '" + DropDownList2.SelectedItem.Value.ToString().Trim()+"' ");  
    SqlDataSource1.SelectCommand = sb.ToString();
      

  6.   

    那2个字段 = 号第一次你都丢掉了,太大意了,上次我没仔细看,现在应该没问题了值得注意的一点是:Status 和 ModuleName 字段在数据库中是什么类型?? 你的DropDownList是Text还是Value对应该值??如果是Text的话,这样
    using System.Text;
    ...
    StringBuilder sb = new StringBuilder();
    sb.Append("select * from Pronto where 1=1 "); 
      if (ProntoName.Text != "")
     sb.Append(" and ProntoName like '%" + ProntoName.Text.ToString() + "%' ");
      if (DropDownList1.SelectedItem.Text != "") 
      sb.Append(" and Status=' " + DropDownList1.SelectedItem.Text.ToString().Trim()+"'  ") ;
      if (DropDownList2.SelectedItem.Text != "")
      sb.Append(" and ModuleName='" +DropDownList2.SelectedItem.Text.ToString().Trim()+"'  ") ;
    SqlDataSource1.SelectCommand = sb.ToString();