我试图在.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