想做一个员工信息查询的页面,其中的SQL语句遇到点问题

我用TextBox组件来获取输入的查询条件,例如namesexdepartmentaddressposition这几个信息,但是这些查询条件不一定都得填,也就是说有可能从... 我用TextBox组件来获取输入的查询条件,例如name sex department address position 这几个信息,但是这些查询条件不一定都得填,也就是说有可能从某些TextBox中获取的是空值,那么我SQL查询语句怎么写啊?这有32种组合的可能性啊,不会要写那么多条SQL语句吧...我后来想用条件判断,先把SQL语句初始内容SqlStr="select name,sex,department,address,position from userinfo where" 然后先做个IF判断,如果全部为空,那么把Where给去掉,如果不是,那么判断第一个是否空,不空那么就SqlStr+=”name='"+TextBox1.Text+"'";但是这样下去就有很多很多个IF分支了,看着都头疼... 主要是如果有2项不为空第二个语句前面就要多个and,不然就好办了,求解决方法! 展开
 我来答
moon7912
2011-07-26 · TA获得超过118个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:319万
展开全部
先用了 Where 1 = 1,后面每个条件都能用and 了
var sqlCount = new StringBuilder();
sqlCount.Append("select ... from ");
sqlCount.Append("NewsProcessTmp n ");

if (!string.IsNullOrEmpty(subject))
sqlCount.AppendFormat(" and n.subject like '%{0}%'", subject);

if (userId > 0)
{
sqlCount.AppendFormat(" and n.Flag = {0}", userId);
}

if (!string.IsNullOrEmpty(keyword))
sqlCount.AppendFormat(" and n.keyword like '%{0}%'", keyword);

if (!string.IsNullOrEmpty(source))
sqlCount.AppendFormat(" and r.source like '%{0}%'", source);

if (!string.IsNullOrEmpty(author))
sqlCount.AppendFormat(" and r.author like '%{0}%'", author);

if (startDate > DateTime.MinValue)
{
sqlCount.AppendFormat(" and n.NewsTime >= '{0}'", startDate.Date.ToString("yyyy-MM-dd"));
}

if (startDate < DateTime.MaxValue)
{
sqlCount.AppendFormat(" and n.NewsTime < '{0}'", endDate.Date.AddDays(1).ToString("yyyy-MM-dd"));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小鹿管家
2025-03-10 广告
批量创建广告,可以试用小鹿管家。小鹿管家是广告批量管理工具,支持快速多账户搭建计划、跨账户复制计划、智能盯盘、多账户报告聚合等提效功能,助力广告投放效率,监控广告投放效果,提升ROI。通过批量创建、智能提醒、BI报表等技术手段帮助广告运营团... 点击进入详情页
本回答由小鹿管家提供
OCTSJimmy
2011-07-26 · TA获得超过533个赞
知道小有建树答主
回答量:505
采纳率:0%
帮助的人:426万
展开全部
用C的写法胡乱给个思路:
//首先做没有任何条件的考虑
if (name.text == null || sex.text == null || department.text == null || address.text == null || position.text == null)
{
return SqlStr + "1 = 1";
//或者写成 SqlStr += " 1=1";
} else {
//接着就条件分歧,一般来说switch中 case完了后都是接break的,但是这里不行,因为要依次判断,所以就顺序向下了。
switch()
{
case name != null:
SqlStr += " and name = '" + name.text + "'";
case sex != null;
SqlStr += " and sex = '" + sex.text + "'";
//下面的请举一反三,谢谢。
}
}
追问
我学的SWITCH语句怎么是
SWITCH(变量)
{
case 值1:XXXXX
break;
···················
}
你那怎么把条件判断放到里面去了哦..
追答
这个是没差的,也可以这么写:
switch([表达式])
{
case :
{
[break]
}
case :
{
[break]
}
case :
{
[break]
}
……
[defalut:
{
[break]
}]
}

以上,尖括号中的是必须,方括号中的是可选。
其实也就类似于if块啦。只是有时候比if更美观和简练罢了。
其实上面的代码也可以写成:
SqlStr = (name.text != null ? SqlStr + " and name = '" + name.text + "'" : SqlStr)
这种的,只要自己看得懂,都行。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jeffrey_1989
2011-07-26
知道答主
回答量:23
采纳率:0%
帮助的人:16.7万
展开全部
我只能想到拼字符串的方法,求高手给好方法
string sql = "select name,sex,department,address,position from userinfo ";
//设一个标志位,判断是否第一个不为空的
bool b = false;
if (!"".Equals(TextBox1.Text)) {
sql += b ? " and name=" + TextBox1.Text + " " : "where name=" + TextBox1.Text + " ";
b = true;
}
if (!"".Equals(TextBox2.Text))
{
sql += b ? " and sex=" + TextBox2.Text + " " : "where sex=" + TextBox2.Text + " ";
b = true;
}
if (!"".Equals(TextBox3.Text))
{
sql += b ? " and department=" + TextBox3.Text + " " : "where department=" + TextBox3.Text + " ";
b = true;
}
if (!"".Equals(TextBox4.Text))
{
sql += b ? " and address=" + TextBox4.Text + " " : "where address=" + TextBox4.Text + " ";
b = true;
}
if (!"".Equals(TextBox5.Text))
{
sql += b ? " and position=" + TextBox5.Text + " " : "where position=" + TextBox5.Text + " ";
b = true;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c1300c0
2011-07-26 · TA获得超过626个赞
知道小有建树答主
回答量:852
采纳率:0%
帮助的人:733万
展开全部
select * from where 1=1 and +“变量 ”
变量 就是你获取的数据
假设 变量为 strsql
你可以这样写
if textbox1.text<>"" then
strsql="and name="&textbox1.text
end if
if textbox2.text<>"" then
strsql="and department="&textbox2.text
end if
以此类推
没有那么麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nannan_lucky
2011-07-26 · 超过14用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:45.9万
展开全部
不用那么麻烦,用类似查询就行了
select name,sex,department,address,position from userinfo where name like ‘%张三%’,sex='男',department like '%研发%',address like '%大海%',position like '%卫生部%',
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式