2010-12-26 4 views
23

Tôi đang sử dụng SqlBulkCopy để khôi phục các bảng từ bản sao lưu xml. Một trong những bảng sao lưu là ~ 200MB lớn và có rất nhiều hồ sơ.Hết giờ hết hạn với SqlBulkCopy

Tôi đang gặp lỗi:

Timeout expired. 
The timeout period elapsed prior to completion of the operation or the server 
is not responding. 

Trả lời

31

Bạn có thể cần phải tăng thời gian chờ. Thử tăng giá trị của sqlBulkCopy.BulkCopyTimeout từ giá trị mặc định là 30 giây.

+9

một thời gian chờ từ 0 có nghĩa là vô hạn. –

+4

Cảm ơn giải pháp. Tôi cũng đã tìm thấy và thử nghiệm giảm sqlBulkCopy.BatchSize. –

4

Thay đổi thuộc tính CommandTimeout của đối tượng SqlCommand của bạn.

Thuộc tính Thời gian chờ kết nối của chuỗi kết nối xác định khoảng thời gian đối tượng SqlConnection chạy trước khi dừng kết nối với máy chủ.

Đồng thời thay đổi thuộc tính SqlBulkCopy.BulkCopyTimeout.

27

Có hai cách để khắc phục lỗi này:

  • Tăng Timeout theo mặc định nó là 30 giây và 0 có nghĩa là vô hạn.

    sqlBulkCopy.BulkCopyTimeout = {time in seconds} 
    
  • Giảm BatchSize theo mặc định nó cố gắng để chèn tất cả các hàng trong cùng một nhóm

    sqlBulkCopy.BatchSize = {no of rows you want to insert at once} 
    

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.batchsize.aspx http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx

+2

Xem thêm: "Kích thước lô được đề xuất cho SqlBulkCopy là gì?" http://stackoverflow.com/questions/779690/what-is-the-recommended-batch-size-for-sqlbulkcopy –