/// <summary> /// 获取数据页 /// </summary> /// <param name="querySql">查询语句</param> /// <param name="parameters">参数</param> /// <param name="page">分页信息</param> /// <returns>数据页</returns> public DataPage GetDataPage(string querySql, List <DataParameter> parameters, DataPage page) { try { if (page.AccuratePartition == true && string.IsNullOrEmpty(page.KeyName) == true) { throw new Exception("精确分页时,未指定分页主键。"); } page.Result = null; Action <IDbConnection, IDbTransaction> GetCountMethod = new Action <IDbConnection, IDbTransaction>((conn, trans) => { //得到记录总数 string sqlCount; if (string.IsNullOrEmpty(page.CountSql) == true) { sqlCount = "select count(*) from (" + querySql + ") page_tbl"; } else { sqlCount = page.CountSql; } object returnObject = this.DbHelper.ExecuteScalar(sqlCount, parameters, conn, trans); //设置总记录数 if (returnObject == null) { page.RecordCount = 0; } else { page.RecordCount = Convert.ToInt32(returnObject); } #region 设置分页属性 if (page.RecordCount == 0) { page.PageIndex = 1; } if (page.RecordCount % page.PageSize != 0) { page.PageCount = page.RecordCount / page.PageSize + 1; if (page.PageCount < page.PageIndex) { page.PageIndex = page.PageCount; } } else { page.PageCount = page.RecordCount / page.PageSize; } if (page.PageCount < page.PageIndex) { page.PageIndex = page.PageCount; } #endregion }); Action <IDbConnection, IDbTransaction> GetDataMethod = new Action <IDbConnection, IDbTransaction>((conn, trans) => { //获取分页语句 string sqlData = ""; if (string.IsNullOrEmpty(page.SortExpression) == true) { page.SortExpression = page.KeyName; } if (string.IsNullOrEmpty(page.SortExpression) == true) { throw new Exception("未设置排序表达式"); } if (page.AccuratePartition == true && page.SortExpression.IndexOf(page.KeyName) < 0) { page.SortExpression += "," + page.KeyName; } switch (this.DbType) { case DataBaseType.SqlServer: sqlData = this.GetSqlServerSql(querySql, page, page.SortExpression); break; case DataBaseType.Oracle: sqlData = this.GetOracleSql(querySql, page, page.SortExpression); break; case DataBaseType.MySql: sqlData = this.GetMySqlSql(querySql, page, page.SortExpression); break; } if (string.IsNullOrEmpty(sqlData) == true) { throw new Exception("不支持对" + this.DbType.ToString() + "数据库的后台分页查询!"); } //获取数据 DataTable resultTable = new DataTable(); resultTable.TableName = "PageTable"; this.DbHelper.FillDataTable(resultTable, sqlData, parameters, conn, null); page.Result = resultTable; }); if (page.IsParallel) { using (IDbConnection conn1 = DbManager.GetCon(this.ConnInfo.DbKey, true)) { IAsyncResult iarGetCount = GetCountMethod.BeginInvoke(conn1, null, null, null); IAsyncResult iarGetData = GetDataMethod.BeginInvoke(this.Connection, null, null, null); System.Threading.WaitHandle[] events = { iarGetCount.AsyncWaitHandle, iarGetData.AsyncWaitHandle }; System.Threading.WaitHandle.WaitAll(events); GetDataMethod.EndInvoke(iarGetData); GetCountMethod.EndInvoke(iarGetCount); } } else { GetCountMethod(this.Connection, this.Transaction); if (page.RecordCount > 0) { GetDataMethod(this.Connection, this.Transaction); } } return(page); } catch (Exception ex) { throw ex; } }
/// <summary> /// 按页获取数据 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="sql">查询语句</param> /// <param name="parameters">参数</param> /// <param name="page">分页信息</param> /// <returns>数据页(实体列表)</returns> public virtual DataPage GetDataPage <T>(string sql, DataParameter[] parameters, DataPage page) where T : new() { IList <T> list = null; try { this.GetDataPage(sql, parameters, page); if (page.Result != null) { list = ConvertToList <T>(page.Result as DataTable); } else { list = new List <T>(); } page.Result = list; return(page); } catch (Exception ex) { this.RollbackTs(); throw ex; } finally { this.CloseCon(); } }