Mam problemy z użyciem TransactionScope
do zawijania wielu zapytań do bazy danych do transakcji, używam SqlBulkCopy z wsadką 500. Gdy zwiększyłem partię wielkość do 1000 otrzymuję błąd:Błąd - transakcja powiązana z bieżącym połączeniem została zakończona, ale nie została usunięta.
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.
jest to kod używam:
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();
}
}
Tutaj więcej informacji, dlaczego? Bardzo dobrą praktyką jest umieszczenie wywołania jako ostatniej instrukcji w bloku użytym. [Więcej informacji o metodzie] (https://msdn.microsoft.com/es-es/library/system.transactions.transactionscope.complete (v = vs.110) .aspx) – Angel
Pomogło. Dziękuję allot –