大家好,又见面了,我是你们的朋友全栈君。
最近在做项目的过程中,需要将从数据库查出来的数据传输给另外一个系统进行分析,我是通过http的post请求发送的,但是在传输的过程中,当传输两万多条的数据是,请求很慢,而且每次只能穿五千多条的数据,剩下的就都丢失了,出现这个问题的原因是对方对http请求最大数据量的设置是2M,所以我们协商的结果是在我们上传数据之前对数据进行分片。所以我就对查出来的数据进行分页,然后按页传输。
这个分页跟我们平时页面上做的分页的思路一样,我是一次性从数据库里把数据查出来,然后对datatable进行分页,也就是假分页吧。
抽象出来的分页的方法:
/// <summary>
/// DataTable分页处理
/// </summary>
/// <param name="dt">想要进行分页的DataTable</param>
/// <param name="PageIndex">当前页数</param>
/// <param name="PageSize">每页记录数</param>
/// <returns></returns>
public DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)
{
if (PageIndex == 0)
return dt;//0页代表每页数据,直接返回
DataTable newdt = dt.Copy();
newdt.Clear();//copy dt的框架
int rowbegin = (PageIndex - 1) * PageSize;
int rowend = PageIndex * PageSize;
if (rowbegin >= dt.Rows.Count)
return newdt;//源数据记录数小于等于要显示的记录,直接返回dt
if (rowend > dt.Rows.Count)
rowend = dt.Rows.Count;
for (int i = rowbegin; i <= rowend - 1; i++)
{
DataRow newdr = newdt.NewRow();
DataRow dr = dt.Rows[i];
foreach (DataColumn column in dt.Columns)
{
newdr[column.ColumnName] = dr[column.ColumnName];
}
newdt.Rows.Add(newdr);
}
return newdt;
}
具体调用:
//总记录数,dt为想要对其进行分页的DataTable
int parkingCount = dt.Rows.Count;
int pageSize = 4000; //每页显示记录数
int pageCount; //总页数
if (parkingCount % pageSize == 0)
{
pageCount = parkingCount / pageSize;
}
else
{
pageCount = parkingCount / pageSize + 1;
}
//pageIndex:当前页数
//在这里因为是控制台程序,所以不能实时接收pageIndex
List<String> list = new List<String>();
for (int pageIndex = 1; pageIndex <= pageCount; pageIndex++)
{
DataTable pageDt = GetPagedTable(dt, pageIndex, pageSize);
String json = JsonHelper.Serialize(dt);
list.Add(json);
LogHelper.Info("查询出来的停车记录" + json);
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105678.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...