目前正在与 Oracle 合作,但还需要 MS SQL 的解决方案。
我有一个 GUI,允许用户生成将在数据库上执行的 SQL。这可能需要很长时间,具体取决于它们生成的搜索。我希望 GUI/应用程序在此搜索期间做出响应,并且希望用户能够取消搜索。
我正在使用后台工作线程。
我的问题是,当用户取消搜索时,我无法中断对数据库的调用。它会等到完成,然后可以轮询“CancelationPending”属性。这不仅浪费了数据库资源,而且还给我的代码带来了问题。
如果用户在一个很长的查询中点击“搜索”,然后点击“取消”,然后再次“搜索”——第一个搜索仍在数据库中缓慢进行。当他们再次点击搜索时,后台工作人员仍然忙碌。我解决这个问题的唯一方法是创建一个新的后台工作者。
这似乎是一种非常丑陋的做事方式。数据库继续工作我正在创建后台工作人员的新实例......当我真的想停止数据库调用并重新使用同一个工作人员时。
我怎样才能做到这一点?
如果您使用 ADO.NET 和 SQL 数据提供程序,请查看 SqlCommand.Cancel 方法。这正是您正在寻找的。但是,它会尝试取消,并且取消可能需要时间。基本上,由 SQL Server 决定何时批准您的取消请求。当查询被取消时,您应该得到一个 SqlException ,指示用户取消了操作。显然,您不想将此异常视为异常并对其进行特殊处理,例如如果 SqlException 是由于用户取消操作而导致的,则只需吞掉它即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)