⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ormreader.cs

📁 一个小型的ORM框架,写得不好请多多指教
💻 CS
字号:
//using System;
//using System.Collections;
//using System.Collections.Generic;
//using System.Text;
//using System.Data;
//using System.Data.SqlClient;
//using System.Reflection;
//using System.Transactions;

//namespace MiniORM.BAK
//{
//    /// <summary>
//    /// ORM读取器,从数据库中读取指定的记录
//    /// </summary>
//    public class OrmReader
//    {
//        /// <summary>
//        /// 读取记录集并且返回
//        /// </summary>
//        /// <param name="id"></param>
//        /// <returns></returns>
//        public object Read(object ModelObject, int id)
//        {
//            List<SqlParameter> Params = new List<SqlParameter>();
//            object objKeyValue = new object();
//            string strKeyName = PubFuncs.GetKey(ModelObject.GetType());

//            //设置主键值
//            PubFuncs.SetKeyValue(ModelObject, id);

//            //读取数据的SQL,并且返回需要的SqlParameter
//            string strSQL = PubFuncs.GetReadSQL(ModelObject, ref Params);

//            SqlCommand cmd = new SqlCommand();
//            foreach (SqlParameter Param in Params)
//            {
//                cmd.Parameters.Add(Param);
//            }

//            // 建立数据库连接
//            using (SqlConnection conn = new SqlConnection(INS.DBUtility.SqlHelper.INSClient_Trade_ConnectionString))
//            {
//                conn.Open();
//                cmd.Connection = conn;
//                cmd.CommandType = CommandType.Text;
//                cmd.CommandText = strSQL;
                
//                using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
//                {
//                    rdr.Read();

//                    //先把rdr获得的值全部保存到HashTable中,这样在后续对ModelObject属性付值的时候就可以直接通过在HashTable中取值,提高速度
//                    Hashtable HashValues = new Hashtable();
//                    for (int i = 0; i < rdr.FieldCount; i++)
//                    {
//                        if (rdr[i] != DBNull.Value)
//                        {
//                            HashValues[rdr.GetName(i).ToLower().Trim()] = rdr[i];
//                        }
//                        //KeyValue
//                        if (rdr.GetName(i) == strKeyName)
//                        {
//                            objKeyValue = rdr[i];
//                        }
//                    }

//                    //反射设置ModelObject的属性
//                    PropertyInfo[] props = ModelObject.GetType().GetProperties();
//                    MiniORMAttribute.DataFieldAttribute FieldAttr = null;
//                    MiniORMAttribute.SubDataObjectAttribute SubDataAttr = null;
//                    object[] CustomAttributes;

//                    foreach (PropertyInfo prop in props)
//                    {
//                        CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldAttribute), false);
//                        if (CustomAttributes.Length > 0)
//                        {
//                            FieldAttr = CustomAttributes[0] as MiniORMAttribute.DataFieldAttribute;
//                            if (FieldAttr != null)
//                            {
//                                //对ModelObject对象属性进行付值
//                                if (HashValues.ContainsKey(prop.Name.ToLower()))
//                                {
//                                    //比如数据库字段是decimal类型,而类属性是double类型,这里是会报错的,所以这里必须借助Convert.ChangeType来进行转换
//                                    //prop.SetValue(ModelObject, HashValues[prop.Name.ToLower()], null);
//                                    prop.SetValue(ModelObject, Convert.ChangeType(HashValues[prop.Name.ToLower()], prop.PropertyType), null);
//                                }
//                            }
//                        }

//                        #region 处理子对象
//                        CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.SubDataObjectAttribute), false);
//                        if (CustomAttributes.Length > 0)
//                        {
//                            SubDataAttr = CustomAttributes[0] as MiniORMAttribute.SubDataObjectAttribute;
//                            if (SubDataAttr != null)
//                            {
//                                //ReadChild将根据prop的类型来做判断,读取子列表
//                                prop.SetValue(ModelObject, ReadChild(prop, objKeyValue), null);
//                            }
//                        }
//                        #endregion
//                    }
                    
//                    cmd.Parameters.Clear();
//                }
//            }

//            return ModelObject;
//        }

//        /// <summary>
//        /// 读取子对象数据
//        /// </summary>
//        /// <param name="SubModelObject"></param>
//        /// <param name="foreignkey"></param>
//        /// <returns></returns>
//        private List<object> ReadChild(Type SubObjectType, object foreignkeyValue)
//        {
//            List<object> lstReturn = new List<object>();
//            object objKeyValue = new object();
//            string strTablename = PubFuncs.GetTableName(SubObjectType);
//            string strKeyName = PubFuncs.GetKey(SubObjectType);
//            string strForeignKey = PubFuncs.GetForeignKey(SubObjectType);
//            string strSelectSQL = "SELECT * FROM {0} WHERE {1};";

//            strSelectSQL = string.Format(strSelectSQL, new string[] { strTablename, strForeignKey + "= @" + strForeignKey });

//            SqlCommand cmd = new SqlCommand();
//            cmd.Parameters.Add(new SqlParameter("@" + strForeignKey, foreignkeyValue));

//            // 建立数据库连接
//            using (SqlConnection conn = new SqlConnection(INS.DBUtility.SqlHelper.INSClient_Trade_ConnectionString))
//            {
//                conn.Open();
//                cmd.Connection = conn;
//                cmd.CommandType = CommandType.Text;
//                cmd.CommandText = strSelectSQL;

//                using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
//                {
//                    while (rdr.Read())
//                    {
//                        //先把rdr获得的值全部保存到HashTable中
//                        Hashtable HashValues = new Hashtable();
//                        for (int i = 0; i < rdr.FieldCount; i++)
//                        {
//                            HashValues[rdr.GetName(i)] = rdr[i];
//                            //KeyValue
//                            if (rdr.GetName(i) == strKeyName)
//                            {
//                                objKeyValue = rdr[i];
//                            }
//                        }

//                        //创建对象并且附值
//                        object model = Activator.CreateInstance(SubObjectType);
//                        PropertyInfo[] props = SubObjectType.GetProperties();
//                        MiniORMAttribute.DataFieldAttribute FieldAttr = null;
//                        MiniORMAttribute.SubDataObjectAttribute SubDataAttr = null;
//                        object[] CustomAttributes;

//                        foreach (PropertyInfo prop in props)
//                        {
//                            CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldAttribute), false);
//                            if (CustomAttributes.Length > 0)
//                            {
//                                FieldAttr = CustomAttributes[0] as MiniORMAttribute.DataFieldAttribute;
//                                if (FieldAttr != null)
//                                {
//                                    if (HashValues.ContainsKey(prop.Name))
//                                    {
//                                        prop.SetValue(model, HashValues[prop.Name], null);
//                                    }
//                                }
//                            }

//                            #region 处理子对象
//                            CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.SubDataObjectAttribute), false);
//                            if (CustomAttributes.Length > 0)
//                            {
//                                SubDataAttr = CustomAttributes[0] as MiniORMAttribute.SubDataObjectAttribute;
//                                if (SubDataAttr != null)
//                                {
//                                    //ReadChild将根据prop的类型来做判断,读取子列表
//                                    prop.SetValue(model, ReadChild(prop, objKeyValue), null);
//                                }
//                            }
//                            #endregion
//                        }

//                        lstReturn.Add(model);
//                    }
//                }
//            }

//            return lstReturn;
//        }

//        /// <summary>
//        /// 根据prop的类型,读取满足foreignkeyValue的记录
//        /// </summary>
//        /// <param name="prop"></param>
//        /// <param name="foreignkeyValue"></param>
//        /// <returns></returns>
//        private object ReadChild(PropertyInfo prop, object foreignkeyValue)
//        {
//            MiniORMAttribute.SubDataObjectAttribute SubDataAttr = null;
//            object[] CustomAttributes;

//            CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.SubDataObjectAttribute), false);
//            if (CustomAttributes.Length > 0)
//            {
//                SubDataAttr = CustomAttributes[0] as MiniORMAttribute.SubDataObjectAttribute;
//                if (SubDataAttr != null)
//                {
//                    Type type = PubFuncs.GetObjectType(SubDataAttr.AssemblyName, SubDataAttr.NamespaceName, SubDataAttr.ClassName);

//                    switch (SubDataAttr.FieldType)
//                    {
//                        case MiniORMAttribute.SubDataObjectFieldType.Object:
//                            {
//                                //prop.SetValue(ModelObject, ReadChild(type, foreignkeyValue)[0], null);
//                                return ReadChild(type, foreignkeyValue)[0];
//                            }
//                            break;
//                        //case MiniORMAttribute.SubDataObjectFieldType.MyHashTable:
//                        //    {
//                        //        List<object> objs = ReadChild(type, foreignkeyValue);
//                        //        INS.Model.MyHashTable hashTmp = new INS.Model.MyHashTable();

//                        //        foreach (object obj in objs)
//                        //        {
//                        //            hashTmp[foreignkeyValue] = obj;
//                        //        }

//                        //        return hashTmp;
//                        //        //prop.SetValue(ModelObject, hashTmp, null);
//                        //    }
//                        //    break;
//                        case MiniORMAttribute.SubDataObjectFieldType.HashTable:
//                            {
//                                List<object> objs = ReadChild(type, foreignkeyValue);
//                                Hashtable hashTmp = new Hashtable();

//                                foreach (object obj in objs)
//                                {
//                                    hashTmp[foreignkeyValue] = obj;
//                                }

//                                return hashTmp;
//                                //prop.SetValue(ModelObject, hashTmp, null);
//                            }
//                            break;
//                        case MiniORMAttribute.SubDataObjectFieldType.List:
//                            {
//                                List<object> objs = ReadChild(type, foreignkeyValue);
//                                List<object> lst = new List<object>();

//                                foreach (object obj in objs)
//                                {
//                                    lst.Add(obj);
//                                }

//                                return lst;
//                                //prop.SetValue(ModelObject, lst, null);
//                            }
//                            break;
//                        case MiniORMAttribute.SubDataObjectFieldType.ArrayList:
//                            {
//                                List<object> objs = ReadChild(type, foreignkeyValue);
//                                ArrayList lst = new ArrayList();

//                                foreach (object obj in objs)
//                                {
//                                    lst.Add(obj);
//                                }

//                                return lst;
//                                //prop.SetValue(ModelObject, lst, null);
//                            }
//                            break;
//                    }
//                }
//            }

//            return null;
//        }
//    }
//}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -