事务 |
一个操作集合:一系列操作 要么全部成功,要么全部失败,例如:银行转账A=》B,两部分 一:提出A,二:放入B ;要么同时成功,要么同时失败 |
事务管理器 |
数据参与到事务运作当中,我们把管理这些数据的工具称为资源管理器 RM,TM事务管理器 协调多个管理器的工作,保证程序正确运行 |
事务管理器分类
核心 事物管理器KTM | |
轻量级事物管理器LTM | 在System.Transactions里的一个管理框架,管理单个程序域,管理多个易变的RM,但只能管理一个持久化的RM,性能最高的事物管理器 |
分布式事务协调器(DTC) |
System.Transactioins.Transaction类
// // 摘要: // 获取或设置环境事务。 // // 返回结果: // 描述当前事务的 System.Transactions.Transaction。 public static Transaction Current { get; set; } // // 摘要: // 获取事务的隔离级别。 // // 返回结果: // System.Transactions.IsolationLevel 值之一,该值指示事务的隔离级别。 public IsolationLevel IsolationLevel { get; } // // 摘要: // 检索有关某个事务的附加信息。 // // 返回结果: // 包含有关某个事务的附加信息的 System.Transactions.TransactionInformation。 public TransactionInformation TransactionInformation { get; }
主要方法
// // 摘要: // 指示事务已完成。 // // 异常: // T:System.ObjectDisposedException: // 尝试在已处置的事务上订阅此事件。 public event TransactionCompletedEventHandler TransactionCompleted; // // 摘要: // 创建事务的克隆。 // // 返回结果: // 一个 System.Transactions.Transaction 作为当前事务对象的副本。 // // 摘要: // 回滚(中止)事务。 public void Rollback(); // // 摘要: // 回滚(中止)事务。 // // 参数: // e: // 有关发生回滚的原因的说明。 public void Rollback(Exception e);
事务使用
public void Execute(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand cmd = new SqlCommand(); SqlTransaction transaction = null; transaction = connection.BeginTransaction("SampleTransaction"); cmd.Connection = connection; cmd.Transaction = transaction; try { cmd.CommandText = ""; cmd.ExecuteNonQuery(); transaction.Commit(); } catch { transaction.Rollback(); } } }