事物(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事物通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和commit transaction
或 rollback transaction语句(或回调函数)来界定。事物由事务开始(begin transaction)和事务结束(committransaction或 rollback transaction)之间执行的全体操作组成。SQL Server中事务语句开始或结束时transaction可简写为tran.
事物应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性.
原子性(atomicity): 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency): 事物必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation): 一个事物的执行不能被其他事务干扰。即一个事物内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability): 持续性也称永久性(permanence),指一个事物一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
启动服务
Distributed Transaction Coordinator(TrkWks)
添加引用
System.Transactions
引入命名空间
using System.Transactions;
编写代码
static void Main(string[] args) { //分布式事务(原子性,要么全部成功,要么全部失败(回滚 →sql完成)) using (TransactionScope ts = new TransactionScope()) { //第一步 string sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; SqlParameter[] param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "12" } }; Console.WriteLine(SqlHelper.ExecuteScalar(sql, param).ToString()); //第二步 string _sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; SqlParameter[] _param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "1" } }; Console.WriteLine(SqlHelper.ExecuteScalar(_sql, _param).ToString()); //完成 ts.Complete(); } Console.ReadKey(); } static void Main(string[] args) { //分布式事务(原子性,要么全部成功,要么全部失败(回滚 →sql完成)) using (TransactionScope ts = new TransactionScope()) { //第一步 string sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; SqlParameter[] param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "12" } }; Console.WriteLine(SqlHelper.ExecuteScalar(sql, param).ToString()); //第二步 string _sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; SqlParameter[] _param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "1" } }; Console.WriteLine(SqlHelper.ExecuteScalar(_sql, _param).ToString()); //完成 ts.Complete(); } Console.ReadKey(); }
ts.Complete();事物完成 ts.Complete();事物完成