事务(TransactionScope)、分布式事务(DTC) 的相关特点和用法

    事务特点:  只需要把需要事务包裹的逻辑块写在using (TransactionScope ts = new TransactionScope())中。除非显示调用ts.Complete()方法。否则,系统不会自动提交这个事务。如果在代码运行退出这个block后,还未调用Complete(),那么事务自动回滚了。在事务块中,操作数据库方法内部都没有用到任何事务类。(都是自动生成的事务操作)

事务原理:TransactionScope 会将当前的 Transaction 存储到线程静态字段中。当稍后实例化 SqlCommand 时(在此 TransactionScope 从线程局部存储中删除之前),该 SqlCommand 会检查线程静态字段以查找现有 Transaction,如果存在则列入该 Transaction 中。通过这种方式,TransactionScope 和 SqlCommand 能够协同工作,从而开发人员不必将 Transaction 显示传递给 SqlCommand 对象。TransactionScope是基于当前线程的。   

DTC:对于多个不同服务器之间的数据库操作,TransactionScope依赖DTC(Distributed Transaction Coordinator)服务完成事务一致性。 系统会判定是否是对多个数据库进行操作,如果是,就会依赖DTC ,(两种不同的数据库连接字符串或者两种不同方法创建的连接,也可能会被认为是不同的数据库从而启用DTC,此时如果DTC配置不当就会报错)

事务介绍原文:http://www.tuicool.com/articles/qaMzIb

关于DTC的配置:1、可以用DTCPing.exe软件测试两端是否正常连通

2、DTC是依赖机器名解析IP的 所以应尽量使双方在一个网段里(网上邻居可见),如不可见,可以选择 计算机--》网络--》启用网络发现和文件共享。

3、如果不行,可以在当前网络连接中的 属性--》IPV4-->属性--》高级--》WINS--》NetBois设置--》默认 【DHCP 动态IP】 或启用TCP/IP上的NetBois 【静态IP】(有可能导致RPC服务器不可用,如果不可用就换默认)

4、如果不在一个网段或者还不行,可以在C:\Windows\System32\drivers\etc\host文件中添加 对方的ip以及计算机名  最后一行要加回车否则读取不到 (注意前面不要有#)

5、此时双方应该可以通过DTCPing 找到对方了    如果还不行,尝试从路由器上设置DNS。 第一步完成(解析计算机名为IP) 

6、 第二部  RPC访问权限 :编辑策略组(gpedit.msc)-》管理模板--》系统--》远程过程调用--》限制未验证的RPC客户端--》编辑-》启用--》     要应用的RPC运行时未验证的客户端限制 设置为无   此时第二部RPC验证完成。

 7、 其他配置项   :(1)启动服务Distributed Transaction Coordinator (MSDTC)   Remote Procedure Call (RPC)

 (2) 关闭防火墙(或添加对应的例外)    

  (3)组件服务:组件服务--》计算机--》我的电脑--》Distributed Transaction Coordinator--》本地DTC-->属性--》安全  把能开的权限都打开



事务示例 代码:

 using (TransactionScope ts = new TransactionScope())
            {
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();//第一个数据库操作
                t.ADD();//第二个数据库操作
                ts.Complete();//提交事务 
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值