C#用到的多条件查询

您所在的位置:网站首页 数据库多个条件查询数据语句怎么写 C#用到的多条件查询

C#用到的多条件查询

2024-07-04 10:42| 来源: 网络整理| 查看: 265

在winform做查询时,都会用到多条件查询。

比如这个页面:

用户也许每个查询条件都填,也许填1个,也许填2个等等。

这里按照三层的写法:

思路: 假设这里用的是 TblStudent 表 1. Mode l文件夹里 首先建立2个类: 第一个类:存放表的字段,把这些字段当成属性。TblStudentModel.cs  第二个类:存放查询的字段、查询的运算符(这里可以采用枚举)、查询的值 等三个属性。TblStudentField.cs 2.UI层。 把要查询的条件,放到一个List集合里,传递给BLL层。 3.BLL层 ,打酱油,把从UI层获取的查询条件传递给DAL层。TblStudentBll.cs 4.DAL: 主要就4个数据存放。 TblStudentDal.cs 第一个:查询语句 第二个:查询语句where 后面的条件 第三个:sql参数列表 第四个:得到数据后,返回的List集合

具体代码实现:

首先是Model层里:

1.TblStudentField.cs :存放查询的字段、运算符和查询的值

public class TblStudentField { //查询的字段名称 public string FieldName { get; set; } //查询的运算符 public Operater Op { get; set; } //查询的值 public string Value { get; set; } } //运算符的枚举 public enum Operater { Qt, Lt, Eq, like }

2.TblStudentModel.cs文件:存放表里的字段

public class TblStudentModel { //字段列表: tSId, tSName, tSGender, tSAddress, tSPhone, tSAge public int Id { get; set; } public string Name { get; set; } public string Gender { get; set; } public string Address { get; set; } public string Phone { get; set; } public int? Age { get; set; } }

DAL层:存放具体查询的代码,里面要调用SqlHelper类里的方法。

TblStudentDal.cs文件里的代码:

public List GetDataList(List tiaojians) { //存放查询后得到的集合 List DataList = new List(); //查询的sql语句,这里因为要拼接查询条件,所以使用的是StringBuilder类型 StringBuilder cmdtxt = new StringBuilder("select * from tblstudent "); //查询条件,采用List的类型来获取条件,最后与上面的语句拼接。 List wheres = new List(); //SqlParameter集合,作为Sql的参数。因为如果是数组的话,比较麻烦,还要定义长度。 List pms = new List(); //获取查询条件。 foreach (TblStudentField tiaojian in tiaojians) { //先定义个参数列表 SqlParameter pm = new SqlParameter("@" + tiaojian.FieldName, tiaojian.Value); //判断Enum运算符,对比生成为Sql使用的运算符。 string yunsf = ""; //首先定义个运算符 switch (tiaojian.Op) { case Operater.Qt: yunsf = " > "; break; case Operater.Lt: yunsf = " < "; break; case Operater.Eq: yunsf = " = "; break; case Operater.like: yunsf = " like "; pm.Value = "%" + pm.Value + "%";//因为如果是like运算符,那么查询的值2变要%% break; } //等到的条件:类似于id=@id,或者age=@age string tiaoj = tiaojian.FieldName + yunsf + "@"+tiaojian.FieldName; //把单个条件添加到条件集合里 wheres.Add(tiaoj); //把sql参数添加到参数集合里. pms.Add(pm); } //先判断下where条件集合里是否有条件 if (wheres.Count > 0) cmdtxt.Append(" where " + string.Join(" and ", wheres));//通过string 拼接条件集合。在每个条件中间加入 and //根据查询条件,获取数据库里的数据,别忘了cmdtxt的类型是StringBuilder要转换下,还有pms的类型是List,也要转换下 using (SqlDataReader dr = SqlHelper.ExecuteReader(cmdtxt.ToString(), System.Data.CommandType.Text, pms.ToArray())) { if (dr.HasRows) { while(dr.Read() ) { //tSId, tSName, tSGender?, tSAddress?, tSPhone?, tSAge?, tSBirthday?, tSCardId?, tsClassId? TblStudentModel ts = new TblStudentModel(); //因为有些字段是可空的,所以要判断 ts.Id = dr.GetInt32(0); ts.Name = dr.GetString(1); ts.Gender = dr.IsDBNull(2) ?null : dr.GetString(2);//string是引用类型,null 可以这样 ts.Address = dr.IsDBNull(3) ? null : dr.GetString(3); ts.Phone = dr.IsDBNull(4) ? null: dr.GetString(4); ts.Age = dr.IsDBNull(5) ? null : (int?)dr.GetInt32(5);//因为int是值类型,这要这样转换下 DataList.Add(ts); } } return DataList; } } UI层:

//存放条件 List tiaojians = new List(); //字段列表tSId, tSName, tSGender, tSAddress, tSPhone, tSAge //根据查询栏是否有值,来进行判断 if (txtId.Text.Length > 0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSId"; sf.Op = Operater.Eq; sf.Value = txtId.Text.Trim(); tiaojians.Add(sf); } if (txtName.Text.Length>0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSName"; sf.Op = Operater.like; sf.Value = txtName.Text.Trim(); tiaojians.Add(sf); } if (cboSex.Text.Length > 0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSGender"; sf.Op = Operater.Eq; sf.Value = cboSex.SelectedItem.ToString(); tiaojians.Add(sf); } if (txtAddress.Text.Length > 0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSAddress"; sf.Op = Operater.like; sf.Value = txtAddress.Text.Trim(); tiaojians.Add(sf); } if (txtPhone.Text.Length > 0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSPhone"; sf.Op = Operater.like; sf.Value = txtPhone.Text.Trim(); tiaojians.Add(sf); } if (txtAge.Text.Length > 0) { TblStudentField sf = new TblStudentField(); sf.FieldName = "tSAge"; sf.Op = Operater.Eq; sf.Value = txtAge.Text.Trim(); tiaojians.Add(sf); } TblStudentBll bll = new TblStudentBll(); //获取list集合 List datalist = bll.GetDataList(tiaojians); //将数据绑定到dataGridView中 dataGridView1.DataSource = datalist; 把要查询的条件放到一个集合里好处,是为了以后的扩展, 查询条件多了。只要把多添加的条件加到后面就好了。

项目文件列表:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3