如何在 .NET 中异步查询数据库

How to query a database asynchronously in .NET

我尝试 运行 在 .NET 中异步查询,以便我可以在其他行仍在传输的同时读取前几行,但到目前为止我没有运气。

我想这样做的原因是我们经常需要从数据库中获取大的 tables,虽然可以不使用 [= 的 asnyc 变体完全冻结 UI 11=] 似乎不可能逐行获取数据以便用户可以看到进度甚至可能使用数据的第一部分。

我尝试的是以下查询:

SELECT 'Hello '
WAITFOR DELAY '0:0:10'
SELECT 'World!'

当我 运行 这个带有 SqlCommand.BeginExecuteReader(callback) 的查询时,回调函数在大约 10 秒后被调用,所以它显然等待整个查询完成。我也尝试了 SqlCommand.ExecuteReaderAsync(),结果相同。

我的问题如下:这在 .NET 中甚至可能吗? 或者因为我的查询它不起作用,如果使用真实查询进行测试会更好(即大 table)?

不确定您是想在 Web 应用程序中还是在 windows

中使用

如果是网页,你可以试试这个

  • 在页面加载时我们可以加载一个空白控件
  • 然后我们可以逐页获取记录,比如 10
  • 将获取的记录附加到控件

希望对您有所帮助

获取 table 中的前 10 行。

SELECT TOP 10 * FROM table ORDER BY ID DESC

然后 运行 第二个查询。

SELECT * FROM table ORDER BY ID DESC

检查前 10 个是否更改(创建、更新、删除)

更新: 或者添加 TOP 然后使用 OFFSET 例如

SELECT TOP 10 * FROM table 

然后

SELECT * FROM table OFFSET 10 LIMIT 50 

或 SQL 之前的 Server 2012 请参阅 Dave Ballantyne 的 solution