在很早的以前,我们要实现一个事务通常是基于SQL的数据库事务,一般的通过SQL查询语言来实现,如下所示,同时更新两本书的价格:
BEGIN TRANSACTION UPDATE tb_Book SET Price=122 WHERE IDENT_CURRENT=1001 UPDATE tb_Book SET Price=88 WHERE IDENT_CURRENT=1002 IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION END ELSE COMMIT TRANSACTION随着.NET技术的不断发展,可通过ADO.NET来实现,这样我们可以将事务更好的应用在业务逻辑中,而非数据库存储中,这样能够更好的实现业务和存储分离,使的事务被业务逻辑所控制,数据库专注于数据存储,达到各负其责的作用,在ADO.NET中事务的写法是:
using (DbTransaction transaction = connection.BeginTransaction()) { command.Transaction = transaction; try { command.ExecuteNonQuery(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw; } }3.分布式事务 上面的代码只能基于同一个数据库连接进行,后来为了实现远程多个数据库的事务,提出了分布式事务,夸数据库服务器进行事务关联:
using (TransactionScope transactionScope = new TransactionScope()) { //操作数据库服务器1中的数据库 using (SqlConnection connection = new SqlConnection(connectionString1)) { SqlCommand command = new SqlCommand(commandText1, connection); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } //操作数据库服务器2中的数据库 using (SqlConnection connection = new SqlConnection(connectionString2)) { SqlCommand command = new SqlCommand(commandText2, connection); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } transactionScope.Complete(); }使用TransactionScope的优点: 自动将本地事务升级为分布式事务:前提是你有不止一个连接到给定数据库或要组合一个连接到另一个数据库连接到同一事务(注意:你必须启动MSDTC服务以支持分布式事务)。 易于编程。如果你更希望淡化对事务的关注,而非显示操作事务,使用TransactionScope将是一个更合适的选择。
transactionScope使用
原文:https://blog.csdn.net/lxrj2008/article/details/73742105