Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Asynchroniczne wywołanie procedury składowanej programu SQL Server w języku C#

W swoim SqlCommand możesz uruchamiać polecenia asynchronicznie za pomocą BeginExecuteNonQuery i EndExecuteNonQuery . Ten ostatni zablokuje się, dopóki nie zostanie wykonany. Jednak nie będzie to raportować postępu z serwera o tym, jak przebiega tworzenie kopii zapasowej - użyłbym do tego paska postępu markizy.

Aby uniknąć EndExecuteNonQuery blokowanie interfejsu użytkownika (w zależności od tego, jak sobie z nim radzisz), będziesz potrzebować wątku w tle. Jeśli używasz tego, możesz równie dobrze nie używać BeginXXX EndXXX metody i rób to synchronicznie w wątku w tle - BackgroundWorker jest do tego najlepszy.

Aby uniknąć używania wątku w tle w interfejsie użytkownika, zamiast blokowania w EndXXX będziesz musiał zarejestrować wywołanie zwrotne i obsłużyć powstałe zdarzenie (wywołanie EndXXX w tym programie obsługi zdarzeń, ale wróci natychmiast).

Aktualizacja: jak w komentarzu, dla asynchronicznych wywołań do poleceń/połączeń SQL, musisz podać tyle samo w ciągu połączenia:

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

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

Lub w kodzie za pomocą konstruktora parametrów połączenia:

builder.AsynchronousProcessing = true;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SSQL:Jak używać przypadku, gdy jako parametr exec

  2. Jak używać Try Catch do wyświetlania błędu logowania dla parametrów połączenia (App.Config)

  3. SPRAWDŹ OGRANICZENIE na wielu kolumnach

  4. SQL Server 2005 i tymczasowy zakres tabel

  5. Czy SQL Server otacza Select...Insert Queries w niejawną transakcję?