[AttributeUsage(AttributeTargets.Property)]

  //Models 特性
        public class CanWriteAttribute : Attribute
        {
            public bool CanWrite { get; set; }
        }
        public System.Data.SqlClient.SqlParameter[] AddParameter<T>(T Models)
        {
            List<System.Data.SqlClient.SqlParameter> List = new List<System.Data.SqlClient.SqlParameter>();
            object objModels = Models;
            Type type = objModels.GetType();
            //Visual Basic
            //System.Reflection.PropertyInfo[] PInfo = type.GetProperties(BindingFlags.NonPublic OR BindingFlags.Instance OR BindingFlags.Static);
            //Visual C# 必须使用 BindingFlags.Public|BindingFlags.GetProperty|BindingFlags.Instance
            PropertyInfo[] PInfo = type.GetProperties(BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance);
            foreach (PropertyInfo item in PInfo)
            {
                if (item == null)
                {
                    continue;
                }
                var IsCanWrite = Attribute.GetCustomAttribute(item, typeof(CanWriteAttribute)) as CanWriteAttribute;
                //实体包含CanWriteAttribute特性 则跳出
                if (IsCanWrite != null && !IsCanWrite.CanWrite)
                {
                    continue;
                }
                if (item.PropertyType == typeof(bool))
                {
                    continue;
                }
                //属性不可写
                if (!item.CanWrite)
                {
                    continue;
                }
                //该属性是否可读
                if (item.CanRead)
                {
                    object objValue = item.GetValue(Models, item.GetIndexParameters());
                    //Key Value加入SqlParameter
                    List.Add(new System.Data.SqlClient.SqlParameter(item.Name, objValue));
                }
            }
            return List.ToArray();
        }

PropertyInfo 类的更多相关文章

  1. C#之反射(PropertyInfo类)

    1.引入命名空间:System.Reflection:程序集:mscorlib(在mscorlib.dll中) 2.示例代码(主要是getType().setValue().getValue()方法) ...

  2. .NET基础篇——Entity Framework 数据转换层通用类

    在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity F ...

  3. C#必须掌握的系统类

    系统类  Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构 ...

  4. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  5. .Net 中的反射(查看基本类型信息) - Part.2

    反射概述 和Type类 1.反射的作用 简单来说,反射提供这样几个能力:1.查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata):2.迟绑定(Late-Binding)方法和属性.3 ...

  6. C#4.0图解教程 - 第24章 反射和特性 - 1.反射

    24.1 元数据和反射 有关程序及类型的数据被成为 元数据.他们保存在程序集中. 程序运行时,可以查看其他程序集或其本身的元数据.一个运行的程序查看本身元数据或其他程序的元数据的行为叫做 反射. 24 ...

  7. 《Programming WPF》翻译 第9章 3.自定义功能

    原文:<Programming WPF>翻译 第9章 3.自定义功能 一旦你挑选好一个基类,你将要为你的控件设计一个API.大部分WPF元素提供属性暴露了多数功能,事件,命令,因为他们从框 ...

  8. .Net 中的反射(查看基本类型信息)

    反射概述 和Type类 1.反射的作用 简单来说,反射提供这样几个能力:1.查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata):2.迟绑定(Late-Binding)方法和属性.3 ...

  9. C# 程序集 和 反射

    .Net反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为.Net的反射机 ...

随机推荐

  1. enote笔记语言(3)(ver0.3)

    章节:enote笔记语言(3)     what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取 ...

  2. Moving Tables POJ - 1083 (思维)

    题目大意 在一层楼上推桌子,每个空间一次只能推1种桌子,且消耗十分钟.可以同时推多个桌子,但是他们所占的空间不能是相交的如图 解法 真的很考验思维能力,首先考虑到这个走廊是有两排的,我瞬间想到了宿舍楼 ...

  3. Spring核心技术(五)——Spring中Bean的作用域

    前文概述了Spring的容器,Bean,以及依赖的一些信息,本文将描述一下Bean的作用域 Bean的作用域 当开发者定义Bean的时候,同时也会定义了该如何创建Bean实例.这些具体创建的过程是很重 ...

  4. java,有用的代码片段

    在我们写程序的过程中,往往会经常遇到一些常见的功能.而这些功能或效果往往也是相似的,解决方案也相似.下面是我在写代码的过程中总结的一些有用的代码片段. 1.在多线程环境中操作同一个Collection ...

  5. Mongodb学习总结(2)——MongoDB与MySQL区别及其使用场景对比

    对于只有SQL背景的人来说,想要深入研究NoSQL似乎是一个艰巨的任务,MySQL与MongoDB都是开源常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数 ...

  6. Set Map List Iterator

    Set和Map类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在Set中,没有重复的key. Map放没有顺序的键值对,所有键值对 — 参见 entrySet(),所有键 — ...

  7. CODEVS——T 1700 施工方案第二季

    http://codevs.cn/problem/1700/ 2012年市队选拔赛北京  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果   ...

  8. linux top进程状态D

    什么是D状态 运行在KVM虚拟机里的一些进程突然出了问题,这些出了问题的进程无法用kill杀掉,使用ps可以看到这些进程处于D状态: [build@kbuild-john ~]$ ps -a -o p ...

  9. eventlet

    项目中要模拟openstack的swift的多路write功能.初步设想是用python的eventlet来实现多线程.比如在write的时候要同时写入两个storage,就用eventlet生成2个 ...

  10. Kruscal算法

    Kruscal算法也是最小生成树算法,这个算法感觉起来可能更直观一点,我们要求最小生成树,我们可以依次找图中的最小权重所在的边,只要这些边不构成回路就添加,知道覆盖所有的顶点. 算法的具体过程: 1. ...