黑马程序员技术交流社区

标题: 一句Sq语句实现多条件查询 [打印本页]

作者: 黄雄斌    时间: 2012-4-2 22:15
标题: 一句Sq语句实现多条件查询

上面是进行查询的三个关键字,其中的三项可随意不同时的赋值,我之前用了下面的代码进行查询:
  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.         }
复制代码
但是这些代码显得太复杂,我听我老师说可以只用一句查询语句就可以实现,我百思不得其解,求教各位,这局查询语句该怎么写?
作者: 郑帅    时间: 2012-4-3 01:15
这个问题很好,我在开发的时候也常遇到这问题。
就是多字段搜索时出现的问题,要多条件搜索,参数太多了。like要重复很多次。
当时我也想找出解决方法,和更有效写法。现在重学一往篇sql一样没能想出好的解决方法。
我看了你程序后有几个可以改进的地方,但不是解决你的问题:
1.where 1=1写法有些底效。
“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫
对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的
时候查询速度会非常慢。
解决方案我就不贴了,你可以看下杨老师的《程序员的SQL金典》
2.你程序中的搜索与判断值是否为有效,可以改善一下。
a.比如搜索条件可以另外写一个方法
b.分三步:获取值、验证值是否有效、搜索
其实问题不大,我也是很喜欢知道有什么更好的解决方案才回复的。即开口了,就顺便说下,有什么不到位的,请多多体谅与指出。
作者: 黄雄斌    时间: 2012-4-3 12:07
郑帅 发表于 2012-4-3 01:15
这个问题很好,我在开发的时候也常遇到这问题。
就是多字段搜索时出现的问题,要多条件搜索,参数太多了。l ...

谢谢指教




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2