最近公司在做武汉公交信息化管理系统,做这种管理项目,最让人痛苦的就是表单的添加、修改、查询。添加、修改在我以前的文章中提到过,利用反射机制可以做到基本不写代码来完成。参见《ORM框架实现数据的自动绑定添加修改 <一>》。(不过遗憾的是,目前做的项目中没使用,还是在痛苦的写赋值语句)

上文中只是解决了添加、修改、显示列表的问题,但是在多关键字查询的时候就又要开始赋值和拼接字符串啦。为了偷懒和省去那些让人讨厌的烦琐事情俺就又开始想取巧的办法啦。

多关键字查询,一般的处理方法是,取出这些查询条件,然后拼接成字符串,然后传个数据层的函数,然后返回DatSet一类的数据集。在这个过程中有几个让人讨厌的地方:

  1. 查询条件过多的时候,参数名就会n多。代码不好看
  2. 需要连接字符串,并且判断具体要求是like 还是 =
  3. 当查询条件变化或者查询要求变化时改代码很是麻烦,容易出错

第一个比较好解决,把这些参数声明成一个类直接当参数传进去就行啦。我们现在项目就是这样做的

第二个就比较麻烦啦。怎么样让这些参数知道自己是什么操作呢?也可以说怎么让程序自动的知道这些属性要做什么操作呢?Attribute 对就是这个玩意。.net中这个像洗盘一样的类。把他吸到参数上面,然后把操作符传给他不就行啦!

代码很简单,简单写一下:

首先声明一个带一个属性的Attribute,用这个属性来存操作符

[AttributeUsage(AttributeTargets.Field)] //此属性只能用在Field上
    public class OpAttribute : Attribute
    {
        private string _op = string.Empty;
    
        public OpAttribute(string op)
        {
            _op = op; 
        }

public string Name
        {
            get { return _op; }
            set { _op = value; }
        }
    }

然后在查询条件的类中加上这些Attribute


public class AttributeClass
{
        [OpAttribute("=")]
        public int MyProperty;
        [OpAttribute("=")]
        public string aa;
        [OpAttribute("like")]
        public string bb;
}

然后再调用一个组合sql语句的方法

AttributeClass ac = new AttributeClass();
ac.MyProperty = 11;
ac.aa = "abcd";
ac.bb = "我唉你";
string sql="1=1";
Type type = typeof(AttributeClass);
foreach (System.Reflection.FieldInfo fieldInfo in type.GetFields())
{
                foreach (Attribute at in fieldInfo.GetCustomAttributes(true))
                {
                    OpAttribute att = at as OpAttribute;
                    if (att != null)
                    {
                        sql += " and " + fieldInfo.Name +" "+ att.Name+" "+ fieldInfo.GetValue(ac);
                    }
                }
}

大功告成。简单实用。当你的查询条件有数十个的时候,这种方法就太方便啦。当然这个只是思路具体还是要完善的。比如实现or操作或者group by操作等等。还可以把这个拼接字符串的方法写成一个积累,这样这个AttributeClass就会自己来拼接字符串啦!

转载于:https://www.cnblogs.com/SoulStore/archive/2008/06/16/1222921.html

ASP.NET偷懒大法三 (利用Attribute特性简化多查询条件拼接sql语句的麻烦)相关推荐

  1. 利用Attribute特性简化多查询条件拼接sql语句的麻烦

    最近公司在做武汉公交信息化管理系统,做这种管理项目,最让人痛苦的就是表单的添加.修改.查询.添加.修改在我以前的文章中提到过,利用反射机制可以做到基本不写代码来完成.参见<ORM框架实现数据的自 ...

  2. oracle创建表语句_利用FME去拼接SQL语句并创建表

    在之前的工作中,我遇到了这么一个需求,需要将数据库内一千多个旧表按其原来表结构,重新创建对应的新表.然后对旧数据的进行处理后,存储新的数据. 不只是结构需要保持一致,还有用户.表空间.约束.备注等也需 ...

  3. kettle job如何利用java的反射机制获取执行的sql语句

    kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...

  4. 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...

    |--需求说明 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话 |--解题思路 采用简单工 ...

  5. FreeSql (三)实体特性

    主键(Primary Key) class Topic {[Column(IsPrimary = true)]public int Id { get; set; } } 约定: 当没有指明主键时,命名 ...

  6. Pro ASP.NET MVC –第四章 语言特性精华

    C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解L ...

  7. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

  8. 第一次来,试发一帖!--ASP.NET 2.0 中的SqlCacheDependency特性

    ASP.NET中的Page Cache是个很有用的东东,只要简单的在页面上方加上一个OutputCache标签,就可以让页面在制定的Duration内直接把自动保存在缓存中的页面内容输出,而不需要让A ...

  9. 利用SQL05特性删除表中重复数据

    问题:一个表有自增的ID列,表中有一些记录内容重复,也就是说这些记录除了ID不同之外,其他的信息都相同.需要把重复的记录保留一条,剩下的删除. 这种需求一般开发人员都会,我这里写出两个版本. 版本一: ...

  10. mvc4 利用filters特性来 实现自己的权限验证 之二

    刚开始摸索C# MVC,也只是按图索骥,对C#的特性不是很懂,耐心看完相关文章,对特性的使用有了进一步理解. 1.特性类的命名规范:特性也是一个类,必须继承于System.Attribute类,命名规 ...

最新文章

  1. Java标识符首字母可以是哪些_Java编程中你不知道的一些标识符有哪些呢?
  2. Lesson 4.1-4.2 逻辑回归模型构建与多分类学习方法逻辑回归参数估计
  3. 算法之------搜索篇
  4. [转]编程语言中的 鸭子模型(duck typing)
  5. 虚拟机安装以及PCL的配置(1)
  6. Delta3d动态角色层
  7. Test.ai完成1100万美元A轮融资,Google人工智能基金领投
  8. java异步判断数据库是否有重复字段值
  9. sublime text 插件记录
  10. UVA 10791 Minimum Sum LCM 数论
  11. IDM下载器最新版本6.32.7
  12. 字节跳动A/B实验背后的秘密:样本量计算
  13. html 还原键盘默认事件,js阻止默认事件 (两种方法)及键盘事件onkeydown 、 onkeypress 、onkeyup实例讲解...
  14. 架构必知:MySQL 如何实现 ACID ?
  15. 开源公告|微信云端深度学习推理框架WeChat TFCC开源啦!
  16. 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水
  17. 【数据结构与算法】之深入解析RSA加密算法的实现原理
  18. 计算机excel柱状图刻度单位,如何设置excel图表的坐标刻度和单位-excel 柱状图 坐标 区间刻度...
  19. armbian清理_N1刷入Armbian后保护emmc – 禁止varlog日志
  20. 手机网站(wap)广告展示一般都有哪些表现形式?

热门文章

  1. 如何使用Transact-SQL进行事务处理[示例]
  2. Hibernate视频学习笔记(8)Lazy策略
  3. 《DSP using MATLAB》Problem 7.25
  4. WPF设计の画刷(Brush)
  5. Mysql两个引擎对比
  6. AntiModerate – 渐进式图片加载的 JavaScript 库
  7. iOS程序-UIScrollView的基本使用
  8. JavaScript笔记1基础
  9. C# Socket之TCPUDP
  10. SpringMvc @PathVariable 工作原理