• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net用三层实现多条件检索示例

    众所周知,三层将项目分为界面层,业务逻辑层和数据访问层(以最基本的三层为例)

    同样都知道,多条件检索其实就是根据用户选择的条件项,然后来拼sql语句

    那么,既然要根据用户选择的条件项来拼sql语句,就肯定要在界面层接收用户的选择,这时候问题来了:

    我是要在界面层拼sql语句吗,这么做完全没问题,功能也完全可以实现,可是这么一来,你是破坏了三层的原则了吗

    那么还架三层做什么?

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

    在数据访问层拼的话这么知道用户选择了哪几个条件项呢,根据分层的原则,是不能把诸如textBox1.Text这样的数据传给数据访问层的

    其实解决的方案就是第二种方式,只是中间通过一个条件模型类来传递用户的选择

    条件模型类如下:

    public class SearchModel 
    { 
    public string Name { get; set; }//记录数据库字段名 
    public string Value { get; set; }//记录对应的值 
    public Action Action { get; set; }//记录相应的操作 
    }

    选择很难看出这个类的作用到底是什么,接着走你~

    之后要准备一个枚举:

    public enum Action 
    { 
    Lessthan, 
    Greatthan, 
    Like, 
    Equart 
    }

    对应数据中中的几个操作,如,>,like,=等,可以根据自己的需要添加

    当然你也可以用数字,不过魔鬼数字最好不要使用,所以还是定义一个枚举吧~动动手指头就ok了

    假设现在要对一个图书表进行多条件检索

    在界面层中的代码:

    ListSearchModel> ss = new ListSearchModel>(); 
    if (!string.IsNullOrEmpty(Request.Form["txtName"]))//如果用户在名字框中输入了文字 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "BookName";//要操作的字段为书名 
    model.Value = Request.Form["txtName"];//对应的值为用户输入的文字 
    model.Action = Action.Like;//操作为like 
    ss.Add(model); 
    }//以下类似 
    if (!string.IsNullOrEmpty(Request.Form["txtAuthor"])) 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "Author"; 
    model.Value = Request.Form["txtAuthor"]; 
    model.Action = Action.Like; 
    ss.Add(model); 
    } 
    if (!string.IsNullOrEmpty(Request.Form["categoryId"])) 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "CategoryId"; 
    model.Value = Request.Form["categoryId"]; 
    model.Action = Action.Equart; 
    ss.Add(model); 
    } 
    if (!string.IsNullOrEmpty(Request.Form["publisherId"])) 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "PublisherId"; 
    model.Value = Request.Form["publisherId"]; 
    model.Action = Action.Equart; 
    ss.Add(model); 
    } 
    if (!string.IsNullOrEmpty(Request.Form["txtISBN"])) 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "ISBN"; 
    model.Value = Request.Form["txtISBN"]; 
    model.Action = Action.Like; 
    ss.Add(model); 
    } 
    if (!string.IsNullOrEmpty(Request.Form["isDiscount"])) 
    { 
    SearchModel model = new SearchModel(); 
    model.Name = "Discount"; 
    model.Value = "1"; 
    model.Action = Action.Equart; 
    ss.Add(model); 
    } 
    ListT_Books> books = searchBll.Searc(ss);//这里调用Bll进行操作

    Bll就先不说,主要是Dal层的sql拼接

    public ListT_Books> Search(ListSearchModel> ss)//接收传进来的条件模型类集合,并对其进行遍历 
    { 
    string sql = "select * from T_Books where IsDelete=0 and ";//开始拼接sql语句 
    for (int i = 0; i  ss.Count; i++) 
    { 
    if (ss[i].Action == Action.Like) 
    { 
    sql += ss[i].Name + " like '%" + ss[i].Value + "%'"; 
    } 
    if (ss[i].Action == Action.Equart) 
    { 
    sql += ss[i].Name + " = " + ss[i].Value; 
    } 
    if (ss[i].Action == Action.Greatthan) 
    { 
    sql += ss[i].Name + " > " + ss[i].Value; 
    } 
    if (ss[i].Action == Action.Lessthan) 
    { 
    sql += ss[i].Name + "  " + ss[i].Value; 
    } 
    if (i != ss.Count - 1) 
    { 
    sql += " and "; 
    } 
    } 
    ListT_Books> list = new ListT_Books>(); 
    DataTable table = SqlHelper.ExecuteDataTable(sql, CommandType.Text);//将拼接好的sql语句传入,开始查询数据库 
    foreach (DataRow row in table.Rows) 
    { 
    T_Books book = GetModelByDataRow.GetBooks(row); 
    list.Add(book); 
    } 
    return list;//返回符合条件的图书集合,完成

     假设用户输入下图的条件:

    最后贴上测试拼接的sql语句,如下

    select * from T_Books where IsDelete=0 and BookName like '%C++%' and Author like '%JChubby%' and CategoryId = 15 and PublisherId = 16 and ISBN like '%1111%' and Discount = 1
    您可能感兴趣的文章:
    • Asp.net 在三层架构中事务的使用实例代码
    • 扩展ASP.NET MVC三层框架且使用StructureMap实现依赖注入1-Model层
    • asp.net实现三层架构的例子
    • ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)
    • ASP.NET创建三层架构图解详细教程
    • 在ASP.NET 2.0中操作数据之一:创建一个数据访问层
    • 在ASP.NET 2.0中操作数据之二:创建一个业务逻辑层
    上一篇:在ASP.NET中支持断点续传下载大文件(ZT)源码
    下一篇:让Sqlite脱离VC++ Runtime独立运行的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp.net用三层实现多条件检索示例 asp.net,用,三层,实现,多,