Tôi đã gặp sự cố khi sử dụng TransactionScope
để bao gồm nhiều truy vấn cơ sở dữ liệu vào giao dịch, tôi đang sử dụng SqlBulkCopy với batchsize 500. Khi tôi tăng lô kích thước đến 1000 tôi nhận được lỗi:Lỗi - Giao dịch liên kết với kết nối hiện tại đã hoàn thành nhưng chưa được xử lý
The transaction associated with the current connection has completed but has not been disposed. The transaction must be disposed before the connection can be used to execute SQL statements.
Đây là mã tôi đang sử dụng:
using (var scope = new TransactionScope())
{
using (var connection = (SqlConnection)customerTable.OpenConnection())
{
var table1BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName1
};
table1BulkCopy.WriteToServer(table1DataTable);
var table2BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName2
};
table2BulkCopy.WriteToServer(table2DataTable);
var table3BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName3
};
table1BulkCopy.WriteToServer(table3DataTable);
var table4BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName4
};
table4BulkCopy.WriteToServer(table4DataTable);
scope.Complete();
}
}
Ở đây chi tiết tại sao? Nó là thực hành rất tốt để đặt cuộc gọi như là tuyên bố cuối cùng trong khối sử dụng. [Thông tin thêm về phương pháp] (https://msdn.microsoft.com/es-es/library/system.transactions.transactionscope.complete (v = vs.110) .aspx) – Angel
Nó đã giúp. Cảm ơn allot –