Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Chiamata asincrona di una stored procedure di SQL Server in C#

Nel tuo SqlCommand puoi eseguire comandi in modo asincrono usando BeginExecuteNonQuery e EndExecuteNonQuery . Quest'ultimo si bloccherà fino al termine. Tuttavia questo non riporterà i progressi dal server su come sta andando il backup:userei una barra di avanzamento di selezione per questo.

Per evitare EndExecuteNonQuery dal bloccare la tua interfaccia utente (a seconda di come la gestisci), avrai bisogno di un thread in background. Se lo usi, potresti anche non utilizzare BeginXXX EndXXX metodi e farlo in modo sincrono su un thread in background:il BackgroundWorker è il migliore per questo.

Per evitare di utilizzare un thread in background nell'interfaccia utente, invece di bloccare su EndXXX dovrai registrare una richiamata e gestire l'evento risultante (chiamando EndXXX in questo gestore di eventi, ma tornerà immediatamente).

Aggiornamento: come per un commento, per le chiamate asincrone al comando SQL/al materiale di connessione, è necessario specificarlo nella stringa di connessione:

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

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

O nel codice usando il generatore di stringhe di connessione:

builder.AsynchronousProcessing = true;