Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Appel asynchrone d'une procédure stockée SQL Server en C#

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;