La compréhension complète des mécanismes de transaction est un cours en soi, et
relève plus de la gestion des bases de données que de la programmation comme
telle2. Nous n’insisterons pas beaucoup plus, sauf pour dire aux initiés qu’il est
possible de déterminer le niveau d’isolation3 soit en créant la transaction.
tr = cn.BeginTransaction(IsolationLevel.Serializable)
Si vous travaillez avec SQL Server, notez que l’objet SqlTransaction permet
beaucoup plus de choses que le OleDbTransaction. Si vous êtes familier avec les
notions de transactions nommées et de SavePoints en Transact-SQL par exemple,
et que vous voulez utiliser ce mécanisme dans votre code .NET, vous devrez
absolument passer par des objets Sql, les objets OleDb n’offrant pas cette
possibilité.
Transact-SQL permet par ailleurs de contrôler les transactions directement dans
vos commandes SQL si vous le désirez. Utiliser ces commandes dans vos
procédures stockées pourrait être intéressant si vous devez absolument utiliser des
objets OleDb (vous supportez peut-être un BD en plusieurs formats) et que vous
voulez obtenir un niveau de contrôle plus avancé dans vos transactions sur SQL
Server.
Transactions distribuées
Une transaction distribuée en est une qui travaille sur des opérations effectuées
sur plusieurs ressources, par exemple, quand vous travaillez simultanément avec
deux bases de données, en implémentant un mécanisme de réplication entre une
base de données maître et une base de données locale.
Vous pourriez aussi vouloir établir une entre plusieurs classes et/ou dll roulant
peut-être sur des ordinateurs différents.
C’est un mécanisme qui s’applique aux membres des classes impliquées plutôt à
des bases de données, mais si les classes développées de cette façon créent des
connexions ADO, la transaction implémentée sur la classe contrôle indirectement
les transactions sur ces (un Rollback sur la classe va s’appliquer à la Connection).
Elles ne sont supportées que dans des environnements très avancés (oubliez ça
avec Access) et impliquent généralement l’intervention du système d’opération.
Les versions modernes de Windows supportent les transactions distribuées au
travers des Component Services, une composante de COM+.
2 Une excellente référence pour tout ce qui a trait à SLQ Server, le livre de Karen
Delaney, dont vous trouverez les coordonnées dans la bibliographie, à la fin du manuel.
3 Le niveau d’isolation gère comment les locks (verrouillage) vont se faire pendant la
transaction. Par exemple, un niveau Serializable comme celui de notre ligne de code
implique que tous les enregistrements du DataSet sont verrouillées pour les autres
utilisateurs le temps que dure la transaction. Il faut que la base de données supporte ce
mécanisme.