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

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

我想要这样做的原因是我们经常需要从数据库中获取大型表,虽然可以不使用ascutec变体的ExecuteReader()完全冻结UI,但似乎无法获取数据行行,以便用户可以看到进度,甚至可以使用第一部分数据.

我尝试的是以下查询:

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

当我使用SqlCommand.BeginExecuteReader(回调)运行此查询时,大约10秒后调用回调函数,因此它显然等待整个查询完成.我也尝试了SqlCommand.ExecuteReaderAsync(),结果相同.

我的问题如下:这在.NET中是否可行?或者它不是因为我的查询而工作,并且如果使用真实查询(即大表)进行测试会更好吗?

最佳答案 获取表格中的前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

点赞