我现在要查仓库的出入库记录,可是条件太多,如出库或入库,厂区,仓库,管理员,出入库时间等,我算了一下有32中情况,我现在只会用case语句,但是显然不实际,请大虾们支招
解决方案 »
- asp.net如何获取页面自身传过来的值
- 请问论坛上的代码块是怎么实现的。
- 使用Substitution控件的问题
- 生成excel并下载的问题,请高手赐教。
- 怎么用IFRAME或者是FRAME实现左边是导航菜单 右面是具体的内容 请贴出源码 谢谢
- Gridview中按钮事件怎么不响应,已经郁闷一天了。
- 感谢大家的帮助,小弟竟然己完成大部分项目模块。(现像各位讨教一点ASP。NET打印编程思路)
- 为了表示感谢,请liwei81888、zkcq2004、wang520d回复!
- 为什么我的TreeView老出错?第一次用。。。
- datagrid问题!
- 关于JS的问题,求高手指点
- 在iis环境下 Flash 报 error 2032
每次只用到一个条件?
那也很方便啊
如果是第一种,那么我个人认为用case和重载就是个不错的方法。别的至少我能力有限,一时想不出来。
如果是第二种,那么就是一个多条件查询语句,不过要是同时出现了32个条件。。确实挺长的啊。。
小弟也是新手。来论坛潜水学习,顺便说说自己的想法,若有错误之处还请各位包涵。
if(string.isNullorEmptary(txtname))
sql+=" and name='"++"'";
写吧 32个条件 你总要判断32次
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];
}
或者有参数数组做 一样的 道理就是这样 希望有点用
}
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,不用拼串
SqlParameter 是怎么给的
谢谢~
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());
}
cm.Parameters.AddWithValue("uID", txtID.Text);