我们从数据库中读去数据,显示于页面。比较简易的方式无非是获取所有的数据,进行绑定。
可是如果数据量成千上万,dataset可能就是发生内存溢出。
事实上我们分页显示的时候每页数据不大可能超过1000条。
否则那样的页面虽都会任何人失去耐心。
那么我们只需从数据库中拿到指定页和条数的数据。
为此我们还需要保证所有数据的排序的。
否则翻页时第一页的数据和第二页的数据可能会重复。
下面是本人整理的sql分页函数。大家可以根据实际需要,传递OracleParameter的。
注意orderby参数必须提供,如是空字符串则sql报错。
/// <summary>
/// 根据分页参数,查询条件来获得DataTable
/// </summary>
/// <param name="columnList"></param>
/// <param name="tableList"></param>
/// <param name="WhereCondition"></param>
/// <param name="orderby"></param>
/// <param name="PageSize"></param>
/// <param name="PageIndex"></param>
/// <returns></returns>
public DataTable GetDBRecords(string columnList, string tableList, string WhereCondition, string orderby, int PageSize, int PageIndex)
{
int rowStart = PageSize * (PageIndex - 1) + 1;
int rowEnd = PageSize * PageIndex;
string sql = string.Format("select * from (select row_number() over(order by {3}) rowindex, {0},(select count(*) from {1} where {2}) AS RecordCount from {1} where {2} order by {3} ) tmpTable where rowindex >= {4} and rowindex <= {5} ", columnList, tableList, WhereCondition, orderby, rowStart, rowEnd);
return ExecuteDataset(sql).Tables[0];
}
}