我有一个报告窗口,它显示了从可能长时间运行的Oracle存储过程返回的结果。我的问题是当用户关闭窗口时,连接到Oracle仍然保持打开状态,潜在的长时间运行报告不会被取消。
唯一关闭打开连接的方法是DBA手动杀死它们或用户退出整个应用程序。
我尝试从不同的线程调用连接上的
我担心唯一的解决方案将是在不同的进程(或者也许是应用程序域)中运行查询。
很可能我正在忽略一些显而易见的东西,非常感谢任何帮助。
请注意,这个问题不是关于将我的连接包装在
唯一关闭打开连接的方法是DBA手动杀死它们或用户退出整个应用程序。
我尝试从不同的线程调用连接上的
Close
,但这似乎不断阻塞。我还尝试回滚事务,但这也存在相同的问题。我担心唯一的解决方案将是在不同的进程(或者也许是应用程序域)中运行查询。
很可能我正在忽略一些显而易见的东西,非常感谢任何帮助。
请注意,这个问题不是关于将我的连接包装在
using
语句中。它是关于如何强制执行查询的Oracle连接关闭。
- Start a thread running a query
- Stash the connection object somewhere
Call close on the connection object
public void Go() { OracleConnection connection; var queryThread = new Thread( () => { using (connection = OpenOracleConnection()) { // execute stored proc that takes 45 mins // raise an event with the data set we load } }); Thread.Sleep(3000); // give it time to be useless var closeThread = new Thread( () => { connection.Close(); }); closeThread.Start(); }