首页 > 代码库 > 特性与反射形成sql语句 一

特性与反射形成sql语句 一

最近需要使用sql语句查询数据库 但是不想每次都写数据库读写所以查了下反射

就想使用反射出来某个实体的所有属性,然后根据属性查询并赋值


首先,需要一个实体类才能反射出数据库对应的字段,

但是开始写属性的时候,我看见特性蛮好用的,可以实现切面编程.

我也查了特性,但是网上这方面资料不多,大多都是介绍,只能自己慢慢摸索了.

    [Model.Context.SelectContext]
    public class Entity
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
弄一个实体类,设置一个特性
Context.SelectContext
可以表示可以用来查询数据

接下来定义SQLHelp类查询

<span style="white-space:pre">	</span>/// <summary>
        /// 查询集合
        /// </summary>
        /// <param name="T">查询的实体 new()</param>
        /// <param name="sql">sql语句</param>
        /// <param name="result">生产实体执行的操作</param>
        /// <param name="param">可变参数</param>
        /// <returns>返回集合</returns>
        public static IEnumerable<T> SelectReader<T>(string sql, Func<System.Data.Common.DbDataReader, T> result, params System.Data.Common.DbParameter[] param)
           where T : class
        {
            using (SqlConnection con = new SqlConnection(connString))
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Connection.Open();
                if (param != null && param.Length > 0)
                    cmd.Parameters.AddRange(param);
                SqlDataReader dr = cmd.ExecuteReader();
                var list = new List<T>();
                while (dr.Read())
                {
                    T t = result(dr);//产生实体类委托,根据sqlDateReader产生一个实体类
                    if (t != null)
                        list.Add(t);
                }
                dr.Close();
                return list;
            }
        }

一个查询方法根据sql语句来返回一个集合


下一篇写sql辅助类,用来定义一个sql操作的模板




特性与反射形成sql语句 一