J'ai eu des difficultés à utiliser le TransactionScope
Pour regrouper plusieurs requêtes de base de données dans une transaction, j'utilise SqlBulkCopy avec une taille de lot de 500. Lorsque j'ai augmenté la taille du lot à 1000, j'ai obtenu l'erreur suivante :
La transaction associée à la connexion actuelle est terminée mais n'a pas été éliminée. La transaction doit être éliminée avant que la connexion puisse être utilisée pour exécuter des instructions SQL.
Voici le code que j'utilise :
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();
}
}