宝哥软件园

ASP.NET三层多条件检索实例

编辑:宝哥软件园 来源:互联网 时间:2021-09-10

众所周知,这三层将项目分为接口层、业务逻辑层和数据访问层(以最基础的三层为例)

众所周知,多条件检索实际上是根据用户选择的条件项,然后拼sql语句

然后,因为您想要根据用户选择的条件拼写sql语句,所以您必须在接口层接收用户的选择。这时,问题来了:

我想在接口层拼写sql语句吗?这样做完全没问题,功能也完全可以实现,但是这样做,有没有打破三层原则

那么三楼是做什么用的?

然后我将在数据访问层拼写sql语句,然后问题又来了:

如果在数据访问层中拼写,就知道用户选择了哪些条件。根据分层原则,不能传递textBox1等数据。数据访问层的文本

事实上,解决方案是第二种方式,但是用户的选择是通过中间的条件模型类传递的

条件模型类如下:

公共类search model { public string Name { get;设置;}//记录数据库字段名公共字符串Value { get设置;}//记录对应的值public Action Action { get设置;}//记录相应的操作}很难看出这个类的功能是什么,那就去吧~

然后准备一个枚举:

公共枚举操作{小于、大于、类似、e quart}对应于数据中的几个操作,例如,类似、=,等等。可以根据自己的需要添加

当然也可以用数字,但是最好不要用魔鬼数字,所以定义一个枚举~动动手指就没事了

假设我们现在想在多个条件下搜索一个书单

接口层中的代码:

ListSearchModel ss=new ListSearchModel();if(!字符串。isnullrempty(请求。表单[' txt name '])//如果用户在名称框中输入文本{ search model model=new search model();模特。名称=' BookName//要操作的字段是标题模型。值=请求。表单[' txt name '];//对应的值是文本模型。行动=行动。比如用户输入的;//操作就像ss。添加(型号);}//下面类似if(!字符串。IsNullOrEmpty(请求。form[' TxTauthor ']){ search model model=new search model();模特。名称='作者';模特。值=请求。形式[' TxTauthor '];模特。行动=行动。喜欢;党卫军。添加(型号);} if(!字符串。IsNullOrEmpty(请求。form[' categoryId ']){ search model model=new search model();模特。Name=' CategoryId模特。值=请求。表单[' categoryId '];模特。行动=行动。Equart党卫军。添加(型号);} if(!字符串。IsNullOrEmpty(请求。form[' Publisherid ']){ search model model=new search model();模特。名称=' PublisherId模特。值=请求。表单[' Publisherid '];模特。行动=行动。Equart党卫军。添加(型号);} if(!字符串。IsNullOrEmpty(请求。form[' TxTibn ']){ SearchMoDEL model=new SearchMoDEL();模特。名称=' ISBN模特。值=请求。形式[' TxTibn '];模特。行动=行动。喜欢;党卫军。添加(型号);} if(!字符串。IsNullOrEmpty(请求。表单[' is discount ']){ search model model=new search model();模特。名称='折扣';模特。值=' 1 ';模特。行动=行动。Equart党卫军。添加(型号);} ListT _ Books books=searchBll。searc(ss);//这里,调用Bll进行操作。Bll就不说了,主要是Dal层的sql拼接。

公共列表_图书搜索(列表搜索模型ss)//接收传进来的条件模型类集合,并对其进行遍历{字符串sql='从电子书中选择*其中IsDelete=0和;//开始拼接结构化查询语言语句for(int I=0;我支持。计数;i ) { if (ss[i]).动作==动作类似于){ sql=ss[i].像"%"这样的名称。值"%";} if (ss[i]).动作==动作eqart){ SQL=ss[I].名称“=”ss[I].价值;} if (ss[i]).动作==动作大于){ sql=ss[i].名为"党卫队[i].价值;} if (ss[i]).动作==动作Lessthan) { sql=ss[i].名为"党卫队[i].价值;}如果(我!=ss .count-1){ SQL=' and ';} }列表_书籍列表=new ListT _ Books();数据表表=SqlHelper .ExecuteDataTable(sql,CommandType .文本);//将拼接好的结构化查询语言语句传入,开始查询数据库foreach(表中的数据行行行){ T _ Books book=GetMolderByDataRow .GetBooks(行);名单。添加(书);}返回列表;//返回符合条件的图书集合,完成假设用户输入下图的条件:

最后贴上测试拼接的结构化查询语言语句,如下

从电子书中选择*其中IsDelete=0,BookName如" %C % ",作者如“%JChubby%”,CategoryId=15,PublisherId=16,ISBN如'11%'和折扣=1

更多资讯
游戏推荐
更多+