我现在要查仓库的出入库记录,可是条件太多,如出库或入库,厂区,仓库,管理员,出入库时间等,我算了一下有32中情况,我现在只会用case语句,但是显然不实际,请大虾们支招

解决方案 »

  1.   

    用case?
    每次只用到一个条件?
    那也很方便啊
      

  2.   

    一时没能理解楼主的意思,你说的条件多指的是一次一个条件,但条件有32个,还是一次多条件查询 ,有32个条件呢。。
    如果是第一种,那么我个人认为用case和重载就是个不错的方法。别的至少我能力有限,一时想不出来。
    如果是第二种,那么就是一个多条件查询语句,不过要是同时出现了32个条件。。确实挺长的啊。。
    小弟也是新手。来论坛潜水学习,顺便说说自己的想法,若有错误之处还请各位包涵。
      

  3.   

    连接sql语句啊,
    if(string.isNullorEmptary(txtname))
      sql+=" and name='"++"'";
      

  4.   

    那就拼接呗sql=" select * from tb where 1=1 "if(条件1!="") sql=sql+" and 字段1=条件1 ";

    写吧  32个条件  你总要判断32次
      

  5.   

    想办法 撒 呵呵 我觉得有个办法 应该还不错 
    string sql="select * from tb where a=@a and b=@b";一般的sql语句都是这样的  条件可以很多 也可以很少
    就是把你要查询的条件(也就是列名 当作参数传到方法里面去 循环列明数组就可以办到  不过这样只局限与每次查询的表的结构都一样)
    例如 你要查询的条件有n个 那么 你列名的参数数组就是names 每个列的值的数组就是values 这两个数组是一一相对应的 循环数组 拼接你要查询的sql语句 就出来了
    sql="select * from tb where "; 
    for(int i=0;i<names.length;i++)
    {
    if(i==0)
    {
    sql+=names[i]+"="+values[i];
    }
    else
    {
    sql+=" and "+names[i]+"="+values[i];
    }
    或者有参数数组做 一样的 道理就是这样 希望有点用
    }
      

  6.   

    用stringbuilder來進行拼接,然後根據條件再查.
      

  7.   

    一般常用的多条件查询都是用stringbuilder
      

  8.   

    select * 
    from t
    where (a = @a or @a is null)
    and (b = @b or @b is null)
    and (c = @c or @c is null)如果将参数 @c 的值设为 null,那么等同于忽略针对 c 列的条件。这么写可以一条语句搞定,不用写 case,不用拼串
      

  9.   

    可以给个例子吗?
    SqlParameter 是怎么给的
    谢谢~
      

  10.   

    还有这个是不是要用存储过程才能赋值为null的啊?
      

  11.   


                List<string> strWhere = new List<string>();
                if (!string.IsNullOrEmpty(hid_txtItem.Value))
                {
                    strWhere.Add("tbBug.ItemId=" + hid_txtItem.Value);
                }
                if (ddlEquip.SelectedIndex > 0)
                {
                    strWhere.Add("tbBug.EquipId=" + ddlEquip.SelectedValue);
                }
                if (ddlIsDel.SelectedIndex > 0)
                {
                    strWhere.Add("tbBug.IsDeal=" + (ddlIsDel.SelectedIndex - 1).ToString());
                }
                if (ddlIsOther.SelectedIndex > 0)
                {
                    strWhere.Add("tbBug.IsOther=" + (ddlIsOther.SelectedIndex - 1).ToString());
                }
                if (ddlSatisfact.SelectedIndex > 0)
                {
                    strWhere.Add("tbBug.UserSatisfact=" + ddlSatisfact.SelectedValue);
                }
                if (strWhere.Count > 0)
                {
                    ViewState["strWhere"] = " Where " + String.Join(" and ", strWhere.ToArray());
                }
      

  12.   

    cm.CommandText = "select Password,Role from Login where uID=@uID";
    cm.Parameters.AddWithValue("uID", txtID.Text);
      

  13.   

    解决了,结合存储过程,将默认值设置为NULL就可以了