ORM框架试验

 

 

public class ORM

    {

        //保存连接字符串

        private string connString;

        //构造函数

        public ORM(string connString)

        {

            this.connString = connString;

        }

        /// <summary>

        /// 添加方法

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="obj"></param>

        /// <returns></returns>

        public int Add<T>(T obj)

        {

            StringBuilder sbSql = new StringBuilder();//创建Sql语句

            sbSql.Append("insert into ");

 

 

            //获取表名

            Type type = obj.GetType();

            //获取当前类型上声明的特性

            TableAttribute[] tables =(TableAttribute [])type.GetCustomAttributes(typeof(LORM.TableAttribute),false);

            sbSql.Append(tables[0].TableName);//通过特性获取数据库中数据表的名称

 

 

            //获取列名列表和值的列表

            string columnNames = string.Empty;//列名列表

            string values = string.Empty;//值的列表

 

            //通过反射获取当前类型的属性

            PropertyInfo[] tablePropertys = type.GetProperties();

            foreach (PropertyInfo property in tablePropertys)

            {

                //当前属性上的特性

                ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);

                //是否为标识列

                if (columns[0].IsIdentify )

                {

                    continue;

                }

                columnNames += columns[0].ColumnName + ",";//列名列表

 

                //值的列表

                values += Common.GetDBValue(columns[0].ColumnType,Convert.ToString(property.GetValue(obj,null))) + ",";//值的列表

            }

 

            columnNames = columnNames.Substring(0, columnNames.Length - 1);

            values = values.Substring(0, values.Length - 1);

 

            //组装Sql语句

            sbSql.AppendFormat(" ({0}) values ({1}) ", columnNames, values);

           

            return DBHelper.ExecuteCommand(connString,sbSql.ToString());

        }

 

        /// <summary>

        /// 查询数据

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <returns></returns>

        public IList<T> GetDataList<T>()

        {

            IList<T> list = new List<T>();

 

            StringBuilder sbSql = new StringBuilder();//保存Sql语句

 

            Type type = typeof(T);

            TableAttribute[] tables = (TableAttribute[])type.GetCustomAttributes(typeof(LORM.TableAttribute), false);

            sbSql.AppendFormat("select * from {0} ", tables[0].TableName);//通过特性得到数据表的名称

 

            PropertyInfo[] tablePropertys = type.GetProperties();//通过反射得到类的属性

 

            using (SqlDataReader reader = DBHelper.GetReader(connString, sbSql.ToString()))

            {

                while (reader.Read())

                {

                    //创建对象

                    T objT = Activator.CreateInstance<T>();

                    //循环设置属性值

                    foreach (PropertyInfo property in tablePropertys)

                    {

                        ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);

                        //通过特性获取列名,设置属性值

                        property.SetValue(objT, Common.SetDBValue(columns[0].ColumnType,reader[columns[0].ColumnName]), null);

                    }

 

                    list.Add(objT);

                }

                reader.Close();

            }

            return list;

        }

 

        public IList<T> GetDataList<T>(string query)

        {

            IList<T> list = new List<T>();

 

            StringBuilder sbSql = new StringBuilder();

 

            Type type = typeof(T);

            TableAttribute[] tables = (TableAttribute[])type.GetCustomAttributes(typeof(LORM.TableAttribute), false);

            if (query != string.Empty)

            {

                query = "where " + query;

            }

            sbSql.AppendFormat("select * from {0} {1}", tables[0].TableName,query);

 

            PropertyInfo[] tablePropertys = type.GetProperties();

            using (SqlDataReader reader = DBHelper.GetReader(connString, sbSql.ToString()))

            {

                while (reader.Read())

                {

                    T objT = Activator.CreateInstance<T>();

                    foreach (PropertyInfo property in tablePropertys)

                    {

                        ColumnAttribute[] columns = (ColumnAttribute[])property.GetCustomAttributes(typeof(LORM.ColumnAttribute), false);

                        property.SetValue(objT, Common.SetDBValue(columns[0].ColumnType, reader[columns[0].ColumnName]), null);

                    }

                    list.Add(objT);

                }

                reader.Close();

            }

            return list;

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值