2011-04-01 22 views
7

Estoy trabajando en una aplicación C# que llama a procedimientos almacenados desde un servidor SQL. Dependiendo de los parámetros de búsqueda que el usuario ingrese, el procedimiento almacenado puede tomar un tiempo y devolver muchos registros.Linq: ejecución de interrupción del procedimiento almacenado

Quiero implementar un botón cancelar para que el usuario pueda cancelar la ejecución del procedimiento almacenado cuando sea demasiado largo. Ejecuto la llamada al procedimiento almacenado en un nuevo hilo para que la GUI no se vea afectada cuando el procedimiento almacenado demora un poco. Leí sobre abortar un hilo, pero encontré muchas opiniones negativas sobre el uso del aborto.

soluciones posibles pienso en:

  • ¿Hay una manera común para detener la ejecución del procedimiento almacenado (que es un método en el código C#)
  • ¿Hay una mejor manera de detener el hilo? (Encontré también Thread.Interrupt() pero esto solo funciona en un hilo bloqueado, no en código en ejecución)
  • Puedo abandonar el hilo y comenzar uno nuevo pero luego se utilizan recursos innecesarios de base de datos y de red
  • ¿Hay una forma de detener el procedimiento almacenado desde el lado del servidor?
+0

tiro en la oscuridad, pero que desconectar la conexión en el DataContext, o envolviendo la llamada en un TransactionScope y llamando "retroceder" detenerlo? – Ocelot20

Respuesta

0

Puede intentar abandonar el lado del servidor de procesos pero requiere ALTO privilegios (administrador del servidor), por lo que no es factible en la mayoría de los casos.

El aborto con subprocesos podría funcionar (no recomendado), pero no estoy seguro de que la base de datos deje de procesarse.

Al final no estoy seguro de que haya alguna forma de hacerlo de manera eficiente.

0

Puede abortar el hilo, pero la consulta seguirá ejecutándose ya que está hospedada por el servidor SQL.

Cuestiones relacionadas