频道栏目
首页 > 程序开发 > 软件开发 > C# > 正文
事务(Transaction) 之分布式事务TransactionScope,原子性
2013-08-23 14:02:35      个评论      
收藏   我要投稿

事物(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();事物完成

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 事务 分布式 原子
上一篇:AutoMapper的配置方法
下一篇:C# 创建Excel并写入内容
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站