近日5期有位同学在工作中遇到了一些问题,在他自己开发的系统中不能实现多条件查询,以下是他写的部分代码:
1
protected void chaxun_Click(object sender, EventArgs e)
2
{
3
4
string sqlsear = "select books_id,baogaomingcheng,danganhao,panhao,zhizuoren,caisetushu,heibaitushu,xiufupaibanshu,wenziyeshu,";
5
sqlsear += "xiutupianshu,zhizuofeiyong,nanduxishu,jianchayuan,wangchengriqi,beizhu from dizhi_ziliaoinfo where 1=1";
6
if (baogaomingcheng.Value.Trim() != "")
7
{
8
string baogao = baogaomingcheng.Value.Trim();
9
sqlsear += "and baogaomingcheng like '%" + baogao + "%'";
10
}
11
if (danganhao.Value.Trim() != "")
12
{
13
if (CheckBox1.Checked == false)
14
{
15
sqlsear+="and danganhao ='"+danganhao.Value.Trim() +"'";
16
}
17
else
18
{
19
sqlsear += "and danganhao like '%" + danganhao.Value.Trim() + "%'";
20
}
21
}
22
23
if (panhao.Value.Trim() != "")
24
{
25
if (CheckBox2.Checked == false)
26
{
27
sqlsear += "and (CHARINDEX('-', panhao) > 0) AND (CAST(SUBSTRING(panhao, 1, CHARINDEX('-', panhao) - 1) AS int) <= '"
28
+ Convert.ToInt32(panhao.Value.Trim())
29
+ "') AND (CAST(SUBSTRING(panhao,CHARINDEX('-', panhao) + 1, LEN(panhao) - CHARINDEX('-', panhao)) AS int) >= '"
30
+ Convert.ToInt32(panhao.Value.Trim())
31
+ "') OR (CHARINDEX('-', panhao) = 0) AND (CAST(panhao AS int) = '"
32
+ Convert.ToInt32(panhao.Value.Trim())
33
+ "')";
34
}
35
else
36
{
37
sqlsear += "and panhao like '%" + panhao.Value.Trim() + "%'";
38
}
39
}
40![](/Images/OutliningIndicators/InBlock.gif)
41
if (zhizuoren.Value.Trim() != "")
42
{
43
sqlsear += "and zhizuoren like '%" + zhizuoren.Value.Trim() + "%'";
44
}
45![](/Images/OutliningIndicators/InBlock.gif)
46
if (caisetushu.Value.Trim() != "")
47
{
48
sqlsear += "and caisetushu ="+caisetushu.Value.Trim();
49
}
50![](/Images/OutliningIndicators/InBlock.gif)
51
if (heibaitushu.Value.Trim() != "")
52
{
53
sqlsear += "and heibaitushu =" + heibaitushu.Value.Trim();
54
}
55![](/Images/OutliningIndicators/InBlock.gif)
56
if (xiufupaiban.Value.Trim() != "")
57
{
58
sqlsear += "and xiufupaibanshu =" + xiufupaiban.Value.Trim();
59
}
60![](/Images/OutliningIndicators/InBlock.gif)
61
if (wenziyeshu.Value.Trim() != "")
62
{
63
sqlsear += "and wenziyeshu =" + wenziyeshu.Value.Trim();
64
}
65![](/Images/OutliningIndicators/InBlock.gif)
66
if (xiufutushu.Value.Trim() != "")
67
{
68
sqlsear += "and xiutupianshu =" + xiufutushu.Value.Trim();
69
}
70![](/Images/OutliningIndicators/InBlock.gif)
71
if (zhizuofeiyong.Value.Trim() != "")
72
{
73
sqlsear += "and zhizuofeiyong =" + zhizuofeiyong.Value.Trim();
74
}
75![](/Images/OutliningIndicators/InBlock.gif)
76![](/Images/OutliningIndicators/InBlock.gif)
77
if (nanduxishu.Value.Trim() != "")
78
{
79
sqlsear += "and nanduxishu like '%" + nanduxishu.Value.Trim() + "%'";
80
}
81![](/Images/OutliningIndicators/InBlock.gif)
82![](/Images/OutliningIndicators/InBlock.gif)
83
if (jianchayuan.Value.Trim() != "")
84
{
85
sqlsear += "and jianchayuan like '%" + jianchayuan.Value.Trim() + "%'";
86
}
87![](/Images/OutliningIndicators/InBlock.gif)
88
if (wangchengriqi1.Value.Trim() != "")
89
{
90
if (wangchengriqi2.Value.Trim() == "")
91
{
92
sqlsear += "and wangchengriqi= '" + wangchengriqi1.Value.Trim() + "'";
93
}
94
else
95
{
96
sqlsear += "and wangchengriqi>= '" + wangchengriqi1.Value.Trim() + "'";
97
sqlsear += "and wangchengriqi<= '" + wangchengriqi2.Value.Trim() + "'";
98
}
99
}
100
sqlsear += "order by wangchengriqi desc";
101
showlist(sqlsear);
102
//jilushuju = sqlsear;
103
//jilusql.Value = sqlsear;
104
//qingkong_ServerClick();
105![](/Images/OutliningIndicators/InBlock.gif)
106
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
他的代码质量姑且不论,但是如此使用SQL,实在是很不方便;这种多条件的查询最好做成存储过程,即使是普通的单SQL语句,也可以通过小技巧更好地实现查询。以上的代码中我们看到了大量的"if"语句,主要是用来判断查询条件框中是否有值,甚至还构造了"1=1"这样的永真式来进行辅助,这样做很不值得。
对于诸如"select [字段列表] from [表] where [条件] = 条件 "这样的查询,我们完全可以对查询的条件进行判断,比如"select * from dizhi_ziliaoinfo where danganhao = @danganhao"就是对上面的代码查询中danganhao字段的优化查询,@danganhao表示查询参数,我们可以通过SqlCommand的Parameters属性来进行添加和赋值,如果该值为空就跳过对danganhao字段的查询,那么我们可以做如下判断"select * from dizhi_ziliaoinfo where ((danganhao = @danganhao) or (@danganhao is null))" ,同理,我们可以编写出更好的存储过程来实现查询。