图中代码的bug不在判断用户是否给了条件,而是最终SQL语句的拼接;整个SQL语句拼接是以用户先选择得到cmbPidSC.SelectedValue的值为前提,如果用户只选择输入姓名一个条件,就会报异常
通过查看执行的SQL语句,错误一目了然:正确写法应该是用where代替and;由此可以将where关键字提前,这个where自带的条件应该符合这个条件有与没有一样比如where 1=1,与后面两个条件拼接在一起不会影响最后筛选结果;后面两个条件中只需使用and进行条件拼接即可
这样做虽然也可以达到最终效果,但是最好不要这么做,这样做数据库会将整个数据表中每一条数据都进行判断,数据越多效率越低
解决的方法有很多,现在先说下其中一种方式就是声明一个布尔类型的标记变量,用这个标记变量来判断拼接条件的SQL语句是否加where关键字
通过hasWhere标记判断不管用户选择哪个条件,最后拼接的SQL语句都会是完整的语句