Linq – interrompt l'exécution de la procédure stockée

Je travaille sur une application C # qui appelle des procédures stockées à partir d'un server SQL. En fonction des parameters de search que l'user saisit, la procédure stockée peut prendre un certain time et renvoyer de nombreux loggings.

Je veux implémenter un button d'annulation afin que l'user puisse annuler l'exécution de la procédure stockée quand cela prend trop de time. Je cours l'appel à la procédure stockée dans un nouveau thread afin que l'interface graphique ne soit pas affectée lorsque la procédure stockée prend un certain time. J'ai lu sur l'abandon d'un fil, mais j'ai trouvé beaucoup d'opinions rejetant l'utilisation de l'abandon.

Des solutions possibles auxquelles je pense:

  • Existe-t-il une manière commune d'arrêter l'exécution de la procédure stockée (qui est une méthode dans le code c #)
  • Y a-t-il un meilleur moyen d'arrêter le fil? (J'ai trouvé aussi Thread.Interrupt () mais cela ne fonctionne que sur un thread bloqué, pas sur le code courant)
  • Je peux abandonner le thread et en démarrer un nouveau, mais des ressources réseau et de database inutiles sont utilisées
  • Est-il possible d'arrêter la procédure stockée du côté server?

Vous ne voudrez peut-être pas utiliser Linq ici. Essaye ça:

Arrêtez l'exécution de requête SQL à partir du code .net

Fondamentalement, utilisez SqlCommand.Cancel ()

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.cancel.aspx

Vous pouvez essayer d'abandonner le côté server de process, mais il nécessite HIGH privilesdge (administrateur du server), donc ce n'est pas possible dans la plupart des cas.

L'avortement de fil pourrait fonctionner (non recommandé), mais je ne suis pas sûr que le DB arrêterait le traitement.

À la fin, je ne suis pas sûr qu'il existe un moyen de le faire efficacement.

Vous pouvez abandonner le thread mais la requête sera toujours exécutée car elle est hébergée par le server SQL.