DTC(Distributed Transaction Coordinator) 分布式事务处理,按照使用方式的不同分布式事务的复杂程度也不同,
基于本地事务的多资源管理器和基于SOA的面向服务的多资源管理器。由于本地事务处理是基于本地事务管理器的,所以它不能管理分布式的事务,一旦当我们处理的事务范围要进行扩大时并且是夸机器的访问时,那么本地事务管理器将自动提升为分布式事务管理器也就是DTC(分布式事务协调器)。
MSDN:CommittableTransaction 类为应用程序使用事务提供了一种显式方法,而不是隐式地使用 TransactionScope 类。与 TransactionScope 类不同,应用程序编写器需要明确调用 Commit 和 Rollback 方法以提交或中止事务。 但是,只有事务的创建者才能提交事务。 因此,通过 Clone 方法获得的可提交事务的副本不是可提交的.
显示事物:
1.ADO.NET事务
public void Add2() { using (DbConnection con = new SqlConnection(this._conStr)) { con.Open(); using (DbTransaction tranaction = con.BeginTransaction()) { try { DbCommand command = con.CreateCommand(); command.Transaction = tranaction; command.CommandText = "insert into test2 values(111)"; command.ExecuteNonQuery(); DbCommand command3 = con.CreateCommand(); command3.Transaction = tranaction; command3.CommandText = "insert into test values(222)"; command3.ExecuteNonQuery(); tranaction.Commit(); } catch (Exception ex) { Console.WriteLine(ex); tranaction.Rollback(); } } } }
2.显示事务 CommittableTransaction
private readonly string _conStr = "data source=.;Initial Catalog=DataMedicine;Integrated Security=SSPI"; public void Add() { //注:CommittableTransaction类继承自Transaction CommittableTransaction committran = new CommittableTransaction(); using (DbConnection conn = new SqlConnection(this._conStr)) { conn.Open(); conn.EnlistTransaction(committran);//需要将本次的连接操作视为事务性的 try { DbCommand command = conn.CreateCommand(); command.CommandText = "insert into test2 values(111)"; command.ExecuteNonQuery(); command = conn.CreateCommand(); command.CommandText = "insert into test values(222)"; command.ExecuteNonQuery(); committran.Commit(); } catch (Exception ex) { Console.WriteLine(ex); committran.Rollback(); //出现出错执行回滚操作 } } }
3.隐式事务 TransactionScope
public void ImplicitTransaction() { using (TransactionScope scope = new TransactionScope()) { using (DbConnection conn = new SqlConnection(this._conStr)) { conn.Open(); DbCommand command = conn.CreateCommand(); command.CommandText = "insert into test2 values(111)"; command.ExecuteNonQuery(); command = conn.CreateCommand(); command.CommandText = "insert into test values(222)"; command.ExecuteNonQuery(); using (DbConnection conn2 = new SqlConnection(this._conStr2)) { conn2.Open(); DbCommand command2 = conn2.CreateCommand(); command2.CommandText = "insert into test2 values(111)"; command2.ExecuteNonQuery(); command2 = conn2.CreateCommand(); command2.CommandText = "insert into test values(222)"; command2.ExecuteNonQuery(); scope.Complete(); } } } }
4.显示事务CommittableTransaction类和隐式事务TransactionScope都支持分布式事务,单库操作时为本地事务,当为多库操作时自动升级为分布式事务,前提是相关的服务必须已经启动,比如Distributed Transaction Coordinator.
浙公网安备 33010602011771号