ADO .NET : utilisation des transactions Version 1.0 James RAVAILLE http://blogs
ADO .NET : utilisation des transactions Version 1.0 James RAVAILLE http://blogs.dotnet-france.com/jamesr Harold CUNICO Dotnet France Association – James RAVAILLE / Harold CUNICO 2 ADO .NET : utilisation des transactions Sommaire 1 Introduction ..................................................................................................................................... 3 1.1 Présentation ............................................................................................................................ 3 1.2 Principes d’exécution d’une transaction ................................................................................. 3 1.3 Présentation de la base de données ....................................................................................... 4 1.3.1 Création de la base de données DotnetFranceA ............................................................. 4 1.3.2 Création de la base de données DotnetFranceB ............................................................. 4 2 Les transactions locales ................................................................................................................... 6 2.1 Création d’une transaction locale ........................................................................................... 6 2.1.1 Présentation .................................................................................................................... 6 2.1.2 Mise en œuvre ................................................................................................................. 6 2.2 Les niveaux d’isolations ........................................................................................................... 8 2.2.1 Présentation .................................................................................................................... 8 2.3 Mise en œuvre......................................................................................................................... 9 2.3.1 Présentation du formulaire ............................................................................................. 9 2.3.2 Gestion des niveaux d’isolation de données ................................................................... 9 2.3.3 Gestion des données ..................................................................................................... 11 2.3.4 Exécution de l’application ............................................................................................. 15 3 Les transactions distribuées .......................................................................................................... 17 3.1 Présentation .......................................................................................................................... 17 3.2 Mise en œuvre....................................................................................................................... 18 4 Conclusion ..................................................................................................................................... 21 Dotnet France Association – James RAVAILLE / Harold CUNICO 3 ADO .NET : utilisation des transactions 1 Introduction 1.1 Présentation Une transaction est un ensemble d’opérations réalisées sur une base de données, exécutée de manière unitaire. En tant qu’unité, ces opérations sont validées uniquement si toutes ont été exécutées avec succès (en application du principe « tout ou rien »). Il existe quatre propriétés connues sous le nom ACID qui définissent une transaction : - Atomicité représente l’intégralité des opérations effectuées par une transaction : soit elles sont validées dans leur ensemble (commit), soit la transaction est annulée (rollback). - Cohérence représente l’intégrité de la base de donnée, que la transaction est était validé ou annulé, la base de donnée doit rester intègre. - Isolation, une transaction est indépendante d’une autre transaction. Les transactions ne peuvent interférer entre elles. - Durabilité, les données sont préservées une fois la transaction achevée. Ces propriétés démontrent tout l’intérêt des transactions quand plusieurs lignes (row) d’une table doivent être modifiées. Quand une modification sur une table entraine des modifications sur d’autres tables (contrainte de clé primaire). Ou bien encore dans tout autre cas qui porterait atteinte aux propriétés ACID. Il existe deux types de transactions en ADO.net, les transactions locales et les transactions distribuées. Les transactions locales sont des transactions simples qui effectuent des opérations sur une seule ressource (par exemple une base de données). Les transactions distribuées quand à elles, sont des transactions qui utilisent de nombreuses ressources. 1.2 Principes d’exécution d’une transaction Le schéma ci-dessous vous expose le principe d’exécution d’une transaction : Bases de données Application (1) Création d’une transaction (2) Exécution d’une requête de mise à jour de données au sein de la transaction (3) Envoi de la requête (3) Les données à modifier sont chargées en mémoire (4) Les modifications sont apportées sur ces données et les opérations effectuées sont enregistrées dans un fichier de transactions (5) Validation de la transaction (5') Annulation de la transaction (6) Envoi d’un commit (6') Envoi d’un rollback (7) Persistance des données modifiées en mémoire (7') Abandon des données (8) Modification du journal des transactions Les choix entre entre i et i’ sont réalisés en fonction des choix de l’utilisateur, dès l’étape 5. Dotnet France Association – James RAVAILLE / Harold CUNICO 4 ADO .NET : utilisation des transactions 1.3 Présentation de la base de données Dans les cas pratiques présentés dans ce cours, nous allons dans un premier temps utiliser une base de données SQL Server 2008 nommée DotnetFranceA. Puis, lorsque nous aborderons les transactions distribuées, nous utiliserons une base de données supplémentaire nommée DotnetFranceB. 1.3.1 Création de la base de données DotnetFranceA La base de données DotnetFranceA ne contient qu’une seule table, nommée Stagiaire. Voici un script SQL, permettant de créer cette table : Et voici un autre script permettant d’alimenter cette table : 1.3.2 Création de la base de données DotnetFranceB La base de données DotnetFranceB ne contient qu’une seule table, nommée Manager. Voici un script SQL, permettant de créer cette table : // SQL INSERT [dbo].[Stagiaire] ([id], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (1, N'PALUDETTO', N'Damien', N'0', N'0', N'0', N'0') INSERT [dbo].[Stagiaire] ([id], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (4, N'SAGARA', N'Sousuke', N'0', N'0', N'0', N'0') GO // SQL CREATE TABLE [dbo].[Stagiaire]( [id] [int] NOT NULL, [nom] [varchar](50) NULL, [prenom] [varchar](50) NULL, [adresse] [varchar](50) NULL, [telephone] [varchar](50) NULL, [mail] [varchar](50) NULL, [information] [varchar](500) NULL, CONSTRAINT [PK_Stagiaire] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], UNIQUE NONCLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO Dotnet France Association – James RAVAILLE / Harold CUNICO 5 ADO .NET : utilisation des transactions Et voici un autre script permettant d’alimenter cette table : // SQL INSERT [dbo].[Manager] ([id], [respId], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (1, 1, N'Ravaille', N'0', N'0', N'0', N'0', N'0') INSERT [dbo].[Manager] ([id], [respId], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (2, 2, N'Vasselon', N'0', N'0', N'0', N'0', N'0') INSERT [dbo].[Manager] ([id], [respId], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (3, 3, N'Hollebecq', N'0', N'0', N'0', N'0', N'0') INSERT [dbo].[Manager] ([id], [respId], [nom], [prenom], [adresse], [telephone], [mail], [information]) VALUES (4, 4, N'Dominiquez', N'0', N'0', N'0', N'0', N'0') GO // SQL CREATE TABLE [dbo].[Manager]( [id] [int] NOT NULL, [respId] [int] NULL, [nom] [varchar](50) NULL, [prenom] [varchar](50) NULL, [adresse] [varchar](50) NULL, [telephone] [varchar](50) NULL, [mail] [varchar](50) NULL, [information] [varchar](500) NULL, CONSTRAINT [PK_Manager] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], UNIQUE NONCLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO Dotnet France Association – James RAVAILLE / Harold CUNICO 6 ADO .NET : utilisation des transactions 2 Les transactions locales 2.1 Création d’une transaction locale 2.1.1 Présentation Pour créer une transaction en ADO.net, on utilise une classe dérivant de la classe DbTransaction. Cette classe appartient à l’espace de nom System.Data.Common du composant System.data.dll du Framework .NET. Cette classe expose les méthodes BeginTransaction, Commit et Rollback, essentielles dans la mise en œuvre des transactions. En fonction des classes d’accès aux données utilisées, vous utiliserez la classe suivante : - System.Data.Odbc.OdbcTransaction - System.Data.OleDb.OleDbTransaction - System.Data.OracleClient.OracleTransaction - System.Data.SqlClient.SqlTransaction La méthode BeginTransaction permet de débuter la transaction. La méthode Commit permet de valider les modifications effectuées par les requêtes exécutées au sein de la transaction. La méthode Rollback permet d’annuler ces modifications. 2.1.2 Mise en œuvre Dans l’exemple ci-dessous, nous utilisons une transaction, au sein de la quelle sont exécutées deux requêtes « Insert » sur une base de données SQL Server 2008. Nous utiliserons donc la classe SqlTransaction. Si les deux requêtes s’exécutant au sein de cette transaction sont exécutées avec succès : - Nous appliquons sur l’objet Transaction la méthode Commit, pour valider la transaction. - Dans une boîte de message, nous afficherons le message « Transaction validée ». Dans le cas où l’exécution d’une des deux requêtes échoue : - Nous appliquons sur l’objet Transaction la méthode Rollback, pour annuler la transaction. - Dans une boîte de message, nous affichons le message d’erreur. Dans notre cas, nous ajoutons un premier Stagiaire. Cet ajout s’exécute normalement. Le second provoque la levée d’une exception, car l’ajout d’un stagiaire avec un identifiant existant provoque une violation d’une contrainte de clé primaire. Ainsi, la transaction est annulée, et aucun ajout n’est effectué en base de données. Dotnet France Association – James RAVAILLE / Harold CUNICO 7 ADO .NET : utilisation des transactions // C# string connectionString = "Data Source=NORBERT\\SQLEXPRESS;Initial Catalog=DotnetFrance;Integrated Security=true"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); SqlCommand commande = connection.CreateCommand(); commande.Transaction = transaction; try { //commande 1 commande.CommandText = "INSERT Stagiaire (id, nom, prenom, adresse, telephone, mail, information) VALUES (7, 'DOLLON', 'Julien', '0', '0', '0', '0')"; commande.ExecuteNonQuery(); //commande 2 commande.CommandText = "INSERT Stagiaire (id, nom, prenom, adresse, telephone, mail, information) VALUES (4, 'VERGNAULT', 'Bertrand', '0', '0', '0', '0')"; commande.ExecuteNonQuery(); transaction.Commit(); MessageBox.Show("Transaction validée"); } catch (Exception Ex) { transaction.Rollback(); MessageBox.Show(Ex.Message); } finally { connection.Close(); } } Dotnet France Association – James RAVAILLE / Harold CUNICO 8 ADO .NET : utilisation des transactions 2.2 Les niveaux d’isolations 2.2.1 Présentation Une application doit souvent gérer de nombreuses transactions simultanément, ainsi que l’accès aux données entre les différentes transactions. Vous trouverez ci-dessous la liste des propriétés de l’énumération IsolationLevel associées à l’objet Transaction. Chaque propriété définie un niveau d’accès aux données en cours de modification par d’autres transactions en cours. Les données qui sont en cours de modification sont dites données volatiles. - Chaos : les données en attente de transactions très isolées ne peuvent être écrasées. - ReadComitted : les données volatiles ne peuvent pas être lues pendant la transaction, mais peuvent être modifiées. - ReadUncommitted : les données volatiles peuvent être lues et modifiées pendant la transaction. - RepeatableRead : les données volatiles peuvent uploads/Finance/ado-net-utilisation-des-transactions.pdf
Documents similaires
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/DKQEydJeAIgMBC56WZeev8ogRd8PcE0dQ8QvliPdCPtRImoR8v20i4Os0tc3ayKZQVkGKFoyYuVFQ8Dcm1W34hHV.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/M7aQKPcwhr4mCfvopAfoOHp8vq9EkSTYUIXFZQOtnV1YYGhIZSbwWKvSyM1yQqUfgTImKYlPAWdO2sXlmQj8Yz2X.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/VWsslqYQmCeKhVzf1zS1y3xjy18icAEKs3IMxWUmRTeRqmMkcQYNg8BYDz25D0isO1QrM6wJK80J72r18uvNmXkp.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/kwD68eA6Jjm1QVWuZneUrar5db2NblcToXbEq4dTz3SlSp977Lra71VcQHgZVKHKKQFS36Yptfm9lLJpdqOtbZV3.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/inJZUguwNIKya6dwGPa5IeYjBi0AFupPxbgH58jQKZHO9gUQI5jCuuxcopnprE4ntTGrHATrcxfir2a767nTCwGd.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/yGwTdYd5hZg3qgQXDD8fVa4e3G2zQcA64wxXsXMT4y2GXB9Wv9Gqrsk1QX2n8u8emTOZ0Nhc6GYg0wTANBQyOCYI.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/KqRbPbLlMMaPuFC1p35DRmPR9cWeKqAy2wyG6q1lIHeb7tZedW4lrRCprvWfH47KUNWLYkwVE7he5qMzrMXYsiC2.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/s4xFsph7NdYFPol0LDsxQjURpntJz4hg3egoV0grs8cQcSnfoCVwgi1KtQC1zefrmmP5FNEL4tNvnnXJsLZaBNpn.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/CnANL9c8AleSpyz29XrGIxcbs6yiJMsWFtn4xjyIZed1uCtgGXVKK3ipDPq57jqEBspqT4PWJEgD8yRRoICigaWx.png)
-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Nov 05, 2022
- Catégorie Business / Finance
- Langue French
- Taille du fichier 0.9612MB