Dans votre SqlCommand
vous pouvez exécuter des commandes de manière asynchrone en utilisant BeginExecuteNonQuery
et EndExecuteNonQuery
. Ce dernier bloquera jusqu'à ce que ce soit fait. Cependant, cela ne signalera pas la progression du serveur sur la façon dont la sauvegarde se déroule - j'utiliserais une barre de progression de sélection pour cela.
Pour éviter le EndExecuteNonQuery
de bloquer votre interface utilisateur (selon la façon dont vous la gérez), vous aurez besoin d'un fil d'arrière-plan. Si vous l'utilisez, vous pouvez également ne pas utiliser BeginXXX
EndXXX
méthodes et le faire de manière synchrone sur un thread d'arrière-plan - le BackgroundWorker
est le meilleur pour cela.
Pour éviter d'utiliser un thread d'arrière-plan dans l'interface utilisateur, au lieu de bloquer sur EndXXX
vous devrez enregistrer un rappel et gérer l'événement résultant (en appelant EndXXX
dans ce gestionnaire d'événements, mais il reviendra immédiatement).
Mise à jour : selon un commentaire, pour les appels asynchrones dans les éléments de commande/connexion SQL, vous devez en spécifier autant dans la chaîne de connexion :
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Ou dans le code à l'aide du générateur de chaîne de connexion :
builder.AsynchronousProcessing = true;