问题描述
刚学C#,新手,望大家帮忙解答一下1:要从两个时间段:例如选取2013-10-10至2013-10-30之间的数据用dateTimePicker1dateTimePicker22:单据的状态有三种1:未付款2:已付款3:全部radioButton1radioButton2radioButton33:按照客户名字查询combobox1请问这一种多条件查询应该怎么写!stringsql2="select*fromTY2010_XSFHPARwhereSHRQ>=#"+dateTimePicker1.Value.Date.ToString()+"#andSHRQ<=#"+dateTimePicker2.Value.Date.ToString()+"#";if(radioButton3.Checked){sql2=sql2+"and1=1";}if(radioButton1.Checked){sql2=sql2+"andflag='0'";}if(radioButton2.Checked){sql2=sql2+"andflag='1'";备注:FLAG是标记是否付款的字段刚学习,问题有点傻,请不要见怪!
解决方案
解决方案二:
stringsql2;stringflag="";if(radioButton3.Checked)//全部{flag="1=1";}if(radioButton1.Checked)//未付款{flag="flag='0'";}if(radioButton2.Checked)//已付款{flag="flag='1'";}sql2="select*fromTY2010_XSFHPARwhereSHRQbetween#"+dateTimePicker1.Value.ToString("yyyy/MM/ddHH:mm:ss")+"#and#"+dateTimePicker2.Value.Date.ToString("yyyy/MM/ddHH:mm:ss")+"#and"+flag;
解决方案三:
修改一下:stringsql2;stringflag="";stringguest="";if(radioButton3.Checked){flag="1=1";}elseif(radioButton1.Checked){flag="flag='0'";}elseif(radioButton2.Checked){flag="flag='1'";}else{MessageBox.Show("请选择付款方式");}guest=comboBox1.SelectedItem.ToString().Trim();//客户名字sql2="select*fromTY2010_XSFHPARwhere 客户='"+guest+"'andSHRQbetween#"+dateTimePicker1.Value.ToString("yyyy/MM/ddHH:mm:ss")+"#and#"+dateTimePicker2.Value.Date.ToString("yyyy/MM/ddHH:mm:ss")+"#and"+flag;
解决方案四:
楼上的高手写的挺仔细的,学习下.
解决方案五:
你无需判断radioButton3.Checked。这个控件只是用来参与确保同一组RadioButton中只能有一个选中就够了,它用不着参与拼sql的工作。
解决方案六:
注意,在你的UI设计中,要将三个RadioButton设置为一组(组名相同),保证只能有一个按钮选中。能不写代码的,就不要写代码。要擅用控件现成的特性来实现一部分业务逻辑控制。
解决方案七:
注意拼凑字符的时候的格式别出错就行
解决方案八:
sql怎么也好说,但是你把sql写在代码里面实在是没必要。
解决方案九:
如果这样将变量填加至字符串中的话容量出错,且不安全,建议用select*fromTY2010_XSFHPARwhereSHRQbetween?and?andflag=?然后以参数的形式去填加值就可以了。cmd.parameters.add("@SHRQ",odbctype.date).values=dateTimePicker1.Value.Date;cmd.parameters.add("@SHRQ",odbctype.date).values=dateTimePicker2.Value.Date;cmd.parameters.add("flag",odbctype.char).values=radioButton3;大概是这个意思,最后一个可以提前判断然后
解决方案十:
写存储过程,定义三个变量:开始时间、结束时间和flag,然后在代码里调用。养成习惯少把查询语句写到代码里。