Tengo una ventana de informe que muestra los resultados devueltos por un procedimiento almacenado potencialmente oráculo de larga ejecución. Mi problema es que cuando el usuario cierra la ventana, la conexión a Oracle permanece abierta y el informe que se ejecuta durante mucho tiempo no se cancela.Forzar el cierre de una conexión oráculo en C#
La única manera de cerrar la conexión abierta es que los DBA los eliminen manualmente o que el usuario salga de la aplicación completa.
He intentado llamar al Close
en la conexión de un hilo diferente, pero parece que se bloquea continuamente. También traté de deshacer una transacción, pero esto muestra el mismo problema.
Me preocupa que la única solución sea ejecutar la consulta en un proceso diferente (¿o quizás en el dominio de la aplicación?).
Es probable que me falta algo obvio, cualquier ayuda sería muy apreciada.
LEA
Esta pregunta no se trata de envolver mi conexión en un comunicado using
. Se trata de cómo forzar una conexión oráculo que está ejecutando una consulta para cerrar.
Ejemplo:
- iniciar un hilo de ejecutar una consulta
- Stash el objeto de conexión en algún lugar
de llamadas de cerca el objeto de conexión
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(); }
El problema es que esto no cierra la conexión, en cambio, la llamada a connection.C lose() bloques esperando a que se ejecute el procedimiento.
Qué ADO.NET proveedor de Oracle está utilizando?(El Microsoft provisto de uno no es compatible con el procesamiento asincrónico, por lo que si es ese, es posible que necesite escribir código para conectarse en otra conexión y matar el proceso ofensivo). – driis
Es el proveedor Oracle.DataAccess que viene con 11.2.0. – jonnii
No es una pregunta bien hecha. Obviamente, tendrá que abortar la consulta primero. No obtendrá una respuesta hasta que explique cómo puso en marcha el accidente de tren, "ventana de informe" no tiene sentido. Código postal –