Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Asynchroner Aufruf einer gespeicherten SQL Server-Prozedur in C#

In Ihrem SqlCommand Sie können Befehle mit BeginExecuteNonQuery asynchron ausführen und EndExecuteNonQuery . Letzteres blockiert, bis es fertig ist. Dies wird jedoch nicht den Fortschritt des Servers darüber melden, wie die Sicherung abläuft - ich würde dafür einen Marquee-Fortschrittsbalken verwenden.

Um die EndExecuteNonQuery zu vermeiden Um Ihre Benutzeroberfläche nicht zu blockieren (je nachdem, wie Sie damit umgehen), benötigen Sie einen Hintergrund-Thread. Wenn Sie dies verwenden, können Sie BeginXXX auch nicht verwenden EndXXX Methoden und tun dies synchron in einem Hintergrund-Thread - dem BackgroundWorker ist dafür am besten geeignet.

Um die Verwendung eines Hintergrundthreads in der Benutzeroberfläche zu vermeiden, anstatt auf EndXXX zu blockieren Sie müssen einen Rückruf registrieren und das resultierende Ereignis verarbeiten (Aufruf von EndXXX in diesem Event-Handler, aber es wird sofort zurückgegeben).

Aktualisierung: Laut einem Kommentar müssen Sie für asynchrone Aufrufe in das SQL-Befehls-/Verbindungsmaterial so viel in der Verbindungszeichenfolge angeben:

http://www.connectionstrings.com/sql-server-2008

Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;

Oder im Code mit dem Connection String Builder:

builder.AsynchronousProcessing = true;