A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄雄斌 中级黑马   /  2012-4-2 22:15  /  2991 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


上面是进行查询的三个关键字,其中的三项可随意不同时的赋值,我之前用了下面的代码进行查询:
  1. private void find_Click(object sender, EventArgs e)//按学号、姓名、年龄查询
  2.         {                    
  3.             //三个条件的综合判定和查询
  4.             int k= 0;//标志符号,是否该执行SQl查询
  5.             string sql = "select '学号'=No,'姓名'=name,'性别'=Sex,'年龄'=Age,'籍贯'=Native,'家庭住址'=Address,'联系电话'=Telephone from Student  where 1=1";
  6.             if (find_no.Text != "")
  7.                {
  8.                  if ( isNumber(find_no.Text.Trim())==false)//  
  9.                      {
  10.                          MessageBox.Show("你输入的学号不是非负数字,不能查询,请重新输入!!", "提示信息", MessageBoxButtons.OK);
  11.                          find_no.Focus();
  12.                          k++;
  13.                      }
  14.                  else
  15.                  {
  16.                     int i = Convert.ToInt32(this.find_no.Text.ToString());
  17.                     sql += "and No='" + i + "'";
  18.                  }
  19.                }
  20.             if (find_age.Text != "")
  21.                {
  22.                  if (isNumber(find_age.Text.Trim()) == false)
  23.                     {
  24.                         MessageBox.Show("你输入的年龄不是非负数字,不能查询,请重新输入!!", "提示信息", MessageBoxButtons.OK);
  25.                        find.Focus();
  26.                        k++;
  27.                     }
  28.                  else
  29.                     {
  30.                     int j = Convert.ToInt32(this.find_age.Text.ToString());
  31.                     sql += "and Age='" + j + "'";
  32.                     }
  33.                 }
  34.             if (find_name.Text != "")
  35.                {
  36.                  sql += "and Name like'%" + find_name.Text + "%'";
  37.                }
  38.             if (k == 0)
  39.             {
  40.                 ShowsqlDate(sql);
  41.             }
  42.         }
复制代码
但是这些代码显得太复杂,我听我老师说可以只用一句查询语句就可以实现,我百思不得其解,求教各位,这局查询语句该怎么写?

评分

参与人数 1技术分 +3 收起 理由
郑文 + 3

查看全部评分

2 个回复

倒序浏览
这个问题很好,我在开发的时候也常遇到这问题。
就是多字段搜索时出现的问题,要多条件搜索,参数太多了。like要重复很多次。
当时我也想找出解决方法,和更有效写法。现在重学一往篇sql一样没能想出好的解决方法。
我看了你程序后有几个可以改进的地方,但不是解决你的问题:
1.where 1=1写法有些底效。
“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫
对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的
时候查询速度会非常慢。
解决方案我就不贴了,你可以看下杨老师的《程序员的SQL金典》
2.你程序中的搜索与判断值是否为有效,可以改善一下。
a.比如搜索条件可以另外写一个方法
b.分三步:获取值、验证值是否有效、搜索
其实问题不大,我也是很喜欢知道有什么更好的解决方案才回复的。即开口了,就顺便说下,有什么不到位的,请多多体谅与指出。

评分

参与人数 1技术分 +3 收起 理由
郑文 + 3

查看全部评分

回复 使用道具 举报
郑帅 发表于 2012-4-3 01:15
这个问题很好,我在开发的时候也常遇到这问题。
就是多字段搜索时出现的问题,要多条件搜索,参数太多了。l ...

谢谢指教
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马