Skip to main content
 首页 » 编程设计

c#之如何表示查询大数据集的当前进度

2024年02月23日32mayingbao

我想使用进度条显示当前进度 % 已加载数据行。我看到 similiar question已在 SO 中被问到,但解决方案只是建议使用选取框样式。

例如,我运行一条查询大型数据表的 Select 语句,这可能需要几秒钟。 我希望进度条更新查询的当前进度。这可能吗?

我知道我需要的东西很少:

  1. 将检索总记录数。 (可以先通过Select count(1)得到)
  2. 一些通知告诉我刚刚检索了多少条记录。

对于 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 
}