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:
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.