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:
http://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;