Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
TransactionScope, classe
Rend un bloc de code transactionnel. Cette classe ne peut pas être héritée.
Assembly : System.Transactions (dans System.Transactions.dll)
Le type TransactionScope expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
TransactionScope() | Initialise une nouvelle instance de la classe TransactionScope. |
|
TransactionScope(Transaction) | Initialise une nouvelle instance de la classe TransactionScope et définit la transaction spécifiée comme une transaction ambiante, afin que le travail transactionnel fait à l'intérieur de la portée utilise cette transaction. |
|
TransactionScope(TransactionScopeOption) | Initialise une nouvelle instance de la classe TransactionScope avec les critères spécifiés. |
|
TransactionScope(Transaction, TimeSpan) | Initialise une nouvelle instance de la classe TransactionScope avec la valeur de délai d'attente spécifiée et définit la transaction spécifiée comme transaction ambiante afin que le travail transactionnel fait à l'intérieur de la portée utilise cette transaction. |
|
TransactionScope(TransactionScopeOption, TimeSpan) | Initialise une nouvelle instance de la classe TransactionScope avec les critères et la valeur de délai d'attente spécifiés. |
|
TransactionScope(TransactionScopeOption, TransactionOptions) | Initialise une nouvelle instance de la classe TransactionScope avec les critères spécifiés. |
|
TransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption) | Initialise une nouvelle instance de la classe TransactionScope avec la valeur de délai d'attente et les critères d'interopérabilité COM+ spécifiés, et définit la transaction spécifiée comme une transaction ambiante afin que le travail transactionnel fait à l'intérieur de la portée utilise cette transaction. |
|
TransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption) | Initialise une nouvelle instance de la classe TransactionScope avec la portée, les critères d'interopérabilité COM+ et les options de transaction spécifiés. |
| Nom | Description | |
|---|---|---|
|
Complete | Indique que toutes les opérations dans la portée sont terminées avec succès. |
|
Dispose | Termine la portée de transaction. |
|
Equals(Object) | Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.) |
|
Finalize | Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.) |
|
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
L'infrastructure System.Transactions fournit à la fois un modèle de programmation explicite basé sur la classe Transaction et un modèle de programmation implicite à l'aide de la classe TransactionScope dans laquelle les transactions sont gérées automatiquement par l'infrastructure.
Important
|
|---|
|
Il est recommandé de créer des transactions implicites à l'aide de la classe TransactionScope afin que le contexte de la transaction ambiante soit géré automatiquement. Vous devez également utiliser la classe TransactionScope et DependentTransaction pour les applications qui requièrent l'utilisation de la même transaction pour plusieurs appels de fonction ou plusieurs appels de thread. Pour plus d'informations sur ce modèle, consultez la rubrique Implementing An Implicit Transaction Using Transaction Scope. Pour plus d'informations sur l'écriture d'une application transactionnelle, consultez Writing A Transactional Application. |
Sur une instanciation d'une TransactionScope par l'instruction new, le gestionnaire de transactions détermine la transaction à laquelle participer. Une fois déterminée, la portée participe toujours à cette transaction. La décision est basée sur deux facteurs : la présence d'une transaction ambiante et la valeur du paramètre TransactionScopeOption dans le constructeur. La transaction ambiante est la transaction dans laquelle votre code s'exécute. Vous pouvez obtenir une référence à la transaction ambiante en appelant la propriété Current statique de la classe Transaction. Pour plus d'informations sur la façon dont ce paramètre est utilisé, consultez la section « Gestion du flux de transaction » dans la rubrique Implementing An Implicit Transaction Using Transaction Scope.
Si aucune exception ne se produit dans la portée de transaction (c'est-à-dire entre l'initialisation de l'objet TransactionScope et l'appel à sa méthode Dispose), la transaction à laquelle la portée participe est autorisée à continuer. Si une exception se produit dans la portée de la transaction, la transaction à laquelle elle participe sera restaurée.
Lorsque votre application termine tout le travail qu'elle souhaite exécuter dans une transaction, vous devez appeler la méthode Complete une fois seulement pour informer ce gestionnaire de transactions qu'il est acceptable de valider la transaction. Ne pas appeler cette méthode entraîne l'abandon de la transaction.
Un appel de la méthode Dispose marque la fin de la portée de transaction. Les exceptions qui se produisent après avoir appelé cette méthode peuvent ne pas affecter la transaction.
Si vous modifiez la valeur de Current à l'intérieur d'une portée, une exception est levée lorsque Dispose est appelé. Toutefois, la valeur précédente est restaurée à la fin de la portée. De plus, si vous appelez Dispose sur Current à l'intérieur d'une portée de transaction qui a créé la transaction, la transaction est abandonnée à la fin de la portée.
L'exemple suivant montre comment utiliser la classe TransactionScope pour définir un bloc de code en vue de participer à une transaction.
// This function takes arguments for 2 connection strings and commands to create a transaction // involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the // transaction is rolled back. To test this code, you can connect to two different databases // on the same server by altering the connection string, or to another 3rd party RDBMS by // altering the code in the connection2 code block. static public int CreateTransactionScope( string connectString1, string connectString2, string commandText1, string commandText2) { // Initialize the return value to zero and create a StringWriter to display results. int returnValue = 0; System.IO.StringWriter writer = new System.IO.StringWriter(); try { // Create the TransactionScope to execute the commands, guaranteeing // that both commands can commit or roll back as a single unit of work. using (TransactionScope scope = new TransactionScope()) { using (SqlConnection connection1 = new SqlConnection(connectString1)) { // Opening the connection automatically enlists it in the // TransactionScope as a lightweight transaction. connection1.Open(); // Create the SqlCommand object and execute the first command. SqlCommand command1 = new SqlCommand(commandText1, connection1); returnValue = command1.ExecuteNonQuery(); writer.WriteLine("Rows to be affected by command1: {0}", returnValue); // If you get here, this means that command1 succeeded. By nesting // the using block for connection2 inside that of connection1, you // conserve server and network resources as connection2 is opened // only when there is a chance that the transaction can commit. using (SqlConnection connection2 = new SqlConnection(connectString2)) { // The transaction is escalated to a full distributed // transaction when connection2 is opened. connection2.Open(); // Execute the second command in the second database. returnValue = 0; SqlCommand command2 = new SqlCommand(commandText2, connection2); returnValue = command2.ExecuteNonQuery(); writer.WriteLine("Rows to be affected by command2: {0}", returnValue); } } // The Complete method commits the transaction. If an exception has been thrown, // Complete is not called and the transaction is rolled back. scope.Complete(); } } catch (TransactionAbortedException ex) { writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message); } catch (ApplicationException ex) { writer.WriteLine("ApplicationException Message: {0}", ex.Message); } // Display messages. Console.WriteLine(writer.ToString()); return returnValue; }
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Important