Trong SqlCommand của bạn bạn có thể chạy các lệnh không đồng bộ bằng cách sử dụng BeginExecuteNonQuery và EndExecuteNonQuery . Sau đó sẽ chặn cho đến khi hoàn thành. Tuy nhiên, điều này sẽ không báo cáo tiến trình từ máy chủ về quá trình sao lưu - Tôi sẽ sử dụng thanh tiến trình marquee cho nó.
Để tránh EndExecuteNonQuery chặn giao diện người dùng của bạn (tùy thuộc vào cách bạn xử lý nó), bạn sẽ cần một chuỗi nền. Nếu bạn sử dụng điều này thì bạn cũng có thể không sử dụng BeginXXX EndXXX và thực hiện đồng bộ trên một chuỗi nền - BackgroundWorker là tốt nhất cho việc này.
Để tránh sử dụng chuỗi nền trong giao diện người dùng, thay vì chặn trên EndXXX bạn sẽ cần đăng ký một cuộc gọi lại và xử lý sự kiện kết quả (gọi EndXXX trong trình xử lý sự kiện này, nhưng nó sẽ trả về ngay lập tức).
Cập nhật: theo nhận xét, đối với các lệnh gọi không đồng bộ vào lệnh SQL / nội dung kết nối, bạn cần chỉ định càng nhiều trong chuỗi kết nối:
https://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Hoặc trong mã bằng trình tạo chuỗi kết nối:
builder.AsynchronousProcessing = true;