示例代码:
private void btnQuery_Click(object sender, EventArgs e){StringBuilder sb = new StringBuilder();//解决加不加 where 问题的两种方法的比较。//加空格或者\n解决两个条件粘连的问题//1、用where 1=1解决where该不该加的问题sb.Append("select * from T_Customers where 1=1\n");//where 1=1 方法效率相对更低。因为如果不优化数据库时,where 1=1 可能会对数据库进行全体扫描。if (cbQueryByName.Checked){sb.Append("and Name like @name\n");}if (cbQueryByMobile.Checked){sb.Append("and MobilePhone like @mobile\n");}if (cbQueryByCarNum.Checked){sb.Append("and CarNum like @carnum\n");}MessageBox.Show(sb.ToString());//2、用 join 解决where该不该加的问题List<string> listWhere = new List<string>();List<SqlParameter> listParameters = new List<SqlParameter>();if (cbQueryByName.Checked)//判断复选框触发事件,是否选中该复选框。{listWhere.Add("Name like @name");listParameters.Add(new SqlParameter("name","%"+txtQueryName.Text+"%"));}if (cbQueryByMobile.Checked){listWhere.Add("MobilePhone like @mobile");listParameters.Add(new SqlParameter("mobile", "%" + txtQueryMobile.Text + "%"));}if (cbQueryByCarNum.Checked){listWhere.Add("CarNum like @carnum");listParameters.Add(new SqlParameter("carnum", "%" + txtQueryCarNum.Text + "%"));}string sql = "select * from T_Customers\n";if (listWhere.Count > 0){string sqlWhere = string.Join(" and ", listWhere.ToArray());//string.Join 方法效率相对更高。sql =sql+" where "+sqlWhere;}dataGridView1.DataSource = SqlHelper.ExecuteDataTable(sql, listParameters.ToArray());//.ToArray()的作用是转换为数组。MessageBox.Show(sql);}