当用户浏览器断开连接时,我该如何取消ASP.NET中的数据库查询?

6

我的ASP.NET(3.5)应用程序允许用户运行一些复杂的查询,可能需要长达4分钟才能返回结果。

当我执行长时间的代码循环时,我会偶尔检查Response.IsClientConnected(),这样如果用户关闭浏览器或点击停止按钮,我就可以结束页面。

但是当查询SQL Server时,我的.NET代码在调用GetDataReader()时被阻塞。

有没有简单的方法可以异步执行GetDataReader(),这样我就可以等待它,但仍然每5-10秒检查一次用户是否仍然连接,并在他们离开时放弃数据库查询?

还是我没有想到其他替代方案?

2个回答

5
您可以使用SqlCommand的BeginExecuteReader方法来获取异步SqlDataReader。以下是一个示例
不确定这是否符合您的需求?
此外,此链接展示了如何取消异步SqlCommand执行。

我正在考虑这个,谢谢!稍后我会进行一些研究,在接受之前确保它符合要求。 - richardtallent
@richardtallent 我从未使用过它,但我添加的附加链接显示了更多示例,并建议在命令对象上使用cancel方法。 - Pharabus

1
我建议创建一个对象,该对象具有封装查询的Start()Wait()方法。在内部使用ManualResetEvent等待查询完成。当查询完成时,您将使用Set()函数,并使用WaitOne()WaitOne(TimeSpan ts)方法在Wait()方法中等待它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接