Appel asynchrone d'une procédure stockée SQL Server en C #
Est-il possible de appeler une procédure stockée SQL Server de manière asynchrone via C#?
J'ai une procédure stockée qui écrit une sauvegarde d'une base de données spécifique (cela peut prendre beaucoup de temps) et je veux montrer l'avancement de la procédure de sauvegarde dans un windows forms (pour cela, j'utilise http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx). Ou devrais-je utiliser le composant Backgroundworker de contrôle et d'exécution de la SP dans un backgroundjob (propre thread) ?
source d'informationauteur uhu
Vous devez vous connecter pour publier un commentaire.
Dans votre
SqlCommand
vous pouvez exécuter les commandes de manière asynchrone à l'aide deBeginExecuteNonQuery
etEndExecuteNonQuery
. Ce dernier sera bloqué jusqu'à ce que sa fait. Cependant cela ne peut pas rendre compte du progrès à partir du serveur sur la façon dont la sauvegarde est vais - je utiliser un rectangle de sélection de la barre de progression.Pour éviter la
EndExecuteNonQuery
de blocage de l'INTERFACE (en fonction de la façon dont vous les manipulez), vous aurez besoin d'un thread d'arrière-plan. Si vous utilisez cette alors vous pourriez aussi bien ne pas utiliserBeginXXX
EndXXX
méthodes et de le faire de manière synchrone sur un thread d'arrière-plan - laBackgroundWorker
est le meilleur pour ce.Pour éviter d'utiliser un thread d'arrière-plan de l'INTERFACE utilisateur, au lieu de bloquer sur
EndXXX
vous devrez vous inscrire à un rappel et à la poignée de l'événement qui en résulte (appelEndXXX
dans ce gestionnaire d'événements, mais il sera de retour tout de suite).Mise à jour: que par un commentaire, pour les appels asynchrones dans la commande SQL/connexion choses, vous devez l'indiquer dans la chaîne de connexion:
http://www.connectionstrings.com/sql-server-2008
Ou dans le code en utilisant la chaîne de connexion du générateur:
Consultez les liens suivants:
Je l'aurais fait dans un thread séparé de toute façon, donc je serais probablement aller pour le BackgroundWorker approche.