我想使用进度条显示当前进度 % 已加载数据行。我看到 similiar question已在 SO 中被问到,但解决方案只是建议使用选取框样式。
例如,我运行一条查询大型数据表的 Select 语句,这可能需要几秒钟。 我希望进度条更新查询的当前进度。这可能吗?
我知道我需要的东西很少:
- 将检索总记录数。 (可以先通过Select count(1)得到)
- 一些通知告诉我刚刚检索了多少条记录。
对于 2. 是我不知道如何实现的部分。
我可以考虑将其拆分成一对查询,但这可能并非始终可行。
但是 SQL 中类似于 Cursor 的东西怎么样?要求 SQL Server 查询一个 block 并返回数据并重复。
for loop{
//query a chunk of records
//return
//Next
}
这样我就可以计算进度并将它们填充到单个 DataTable 中。
有没有可能做上面的事情?如果是,怎么办?
因为我看到一个ASP.NET应用程序可以显示加载一个大数据表的进度,所以我想在WPF中实现同样的东西。
请您参考如下方法:
如果您将整个表加载到内存中,您可能做错了。用户真的需要所有这些数据吗?有多少用户会同时查询数据库?您确定用户将使用整个表格吗?
如果您对所有这些问题的回答都是yes,那么您可以考虑使用分页模式:Skip + Take,您可以取得进步使用 skip/take/total 值更新事件。
//META CODE
var dataTable = new List<DataTable>(); //in-memory storage
int rowCount = [...].Rows.Count(); //this is fast check with database
int current;
while (current < rowCount)
{
var fetchedData = [...].Skip(current).Take(1000).ToList();
dataTable.AddRange(fetchedData);
current = dataTable.Rows.Count();
//fire progress update event
}
