Beispiel #1
0
        /// <summary>
        /// 执行查询SQL,返回列表object
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="pageSize"></param>
        /// <param name="curPage"></param>
        /// <param name="returnClass">不能为null</param>
        /// <returns></returns>
        public PageList <T> ExecutePageListObjectByType <T>(string sql, string orderKey, int pageSize, int curPage, Type returnClass)
        {
            PageList <T> objs = new PageList <T>();
            T            obj;
            IDataReader  idr = null;

            // 计算获取的记录编号范围(当前页)
            objs.SetPage(pageSize, curPage);

            try
            {
                // 获取总记录数
                if (pageSize != -1)
                {
                    objs.TotalCount = ParamUtil.getint(_db.ExecuteScalarBySql(_isql.CountSql(sql)));
                }
                string pageSql = _isql.PageSql(sql, orderKey, objs.StartRecord, objs.EndRecord);
                // 执行查询
                idr = _db.ExecuteReaderBySql(pageSql);

                // 获取指定范围的数据
                while (idr.Read())
                {
                    obj = (T)ReflectUtil.CreateInstance(returnClass);

                    // 第一列为COL_ROWNUM(记录号),不设置属性值
                    for (int i = 1; i < idr.FieldCount; i++)
                    {
                        ReflectUtil.SetPropertyValue(obj, idr.GetName(i), idr.GetValue(i));
                    }
                    objs.Add(obj);
                }

                // 如果未分页,则设置总数为当前页记录数
                if (pageSize == -1)
                {
                    objs.TotalCount = objs.CurPageCount;
                }
            }
            finally
            {
                if (idr != null)
                {
                    idr.Close();
                }
            }

            return(objs);
        }