威尼斯人线上娱乐

【威尼斯人线上娱乐】中TransactionScope的选拔方法和规律,中回滚TransactionScope的使用办法和规律

3 4月 , 2019  

TransactionScope只要一个操作失利,它会自行回滚,Complete表示事情完毕

 

实事上,1个荒唐的了然便是Complete()方法是交给业务的,那是一无所能的,事实上,它的效益的意味本作业完成,它1般位于try{}的结尾处,不用判断前台操作是还是不是成功,固然不成功,它会友善回滚。

 

 

在.net
一.一的时代,还尚未TransactionScope类,由此不少有关业务的处理,都交给了SqlTransaction和SqlConnection,每种Transaction是基于各种Connection的。那种安排对于抢先八个程序集大概四个点子的作业行为的话,不是极度好,需求把作业和数据库连接作为参数字传送入。

在.net
二.0后,TransactionScope类的现身,大大的简化了作业的布置。示例代码如下:

  1.  

    static void Main(string[]
    args)

  2.  

    {

  3. 【威尼斯人线上娱乐】中TransactionScope的选拔方法和规律,中回滚TransactionScope的使用办法和规律。 

    using
    (TransactionScope ts = new
    TransactionScope())

  4.  

    {

  5.  

    userBLL u = new userBLL();

  6.  

    TeacherBLL t = new TeacherBLL();

  7.  

    u.ADD();

  8.  

    t.ADD();

  9.  

    ts.Complete();

  10.  

    }

  11.  

    }

只须要把要求工作包裹的逻辑块写在using (TransactionScope ts = new
TransactionScope())中就能够了。从那种写法能够见到,TransactionScope实现了IDispose接口。除非呈现调用ts.Complete()方法。不然,系统不会自行提交这些事情。假使在代码启动退出那么些block后,还未调用Complete(),那么事务自动回滚了。在那一个事情块中,u.ADD()方法和t.ADD()方法内部都未有运用任何事务类。

TransactionScope是基于当前线程的,在眼下线程中,调用Transaction.Current方法能够见见近来工作的消息。具体有关TransactionScope的选取办法,已经它的积极分子方法和质量,能够查阅 MSDN.aspx) 。

TransactionScope类是能够嵌套使用,假诺要嵌套使用,须求在嵌套事务块中钦赐TransactionScopeOption参数。暗中认可的这一个参数为Required。

该参数的具体意思能够参考

例如下边代码:

  1.  

    static void Main(string[]
    args)

  2.  

    {

  3.  

    using
    (TransactionScope ts = new
    TransactionScope())

  4.  

    {

  5.  

    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

  6.  

    userBLL u = new userBLL();

  7.  

    TeacherBLL t = new TeacherBLL();

  8.  

    u.ADD();

  9.  

    using
    (TransactionScope ts2 = new
    TransactionScope(TransactionScopeOption.Required))

  10.  

    {

  11.  

    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

  12.  

    t.ADD();

  13.  

    ts2.Complete();

  14.  

    }

  15.  

    ts.Complete();

  16.  

    }

  17.  

    }

当嵌套类的TransactionScope的TransactionScopeOption为Required的时候,则能够见到如下结果,他们的业务的ID都以同八个。并且,唯有当3个TransactionScope都complete的时候才能算真的打响。

威尼斯人线上娱乐 1

假若把TransactionScopeOption设为RequiresNew,则嵌套的事务块和外围的事务块各自独立,互不影响。

  1.  

    static void Main(string[]
    args)

  2.  

    {

  3.  

    using
    (TransactionScope ts = new
    TransactionScope())

  4.  

    {

  5.  

    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

  6.  

    userBLL u = new userBLL();

  7.  

    TeacherBLL t = new TeacherBLL();

  8.  

    u.ADD();

  9.  

    using
    (TransactionScope ts2 = new
    TransactionScope(TransactionScopeOption.RequiresNew))

  10.  

    {

  11.  

    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

  12.  

    t.ADD();

  13.  

    ts2.Complete();

  14.  

    }

  15.  

    ts.Complete();

  16.  

    }

  17.  

    }

威尼斯人线上娱乐 2

能够看到,他们的事情id是不等同的。

 

 

TransactionScopeOption的属性值:

 

威尼斯人线上娱乐 3

威尼斯人线上娱乐 4

威尼斯人线上娱乐 5

对于多个例外服务器之间的数据库操作,TransactionScope正视DTC(Distributed
Transaction Coordinator)服务到位工作1致性。

然而对于单1服务器数据,TransactionScope的编写制定则比较复杂。首要用的的是线程静态性子。线程静态特性ThreadStaticAttribute让CLBMWX5知道,它标志的静态字段的存取是依靠当前线程,而单独于其余线程的。既然存款和储蓄在线程静态字段中的数据只对存款和储蓄该多少的同一线程中所运营的代码可知,那么,可应用此类字段将别的数据从三个艺术传递到该第多个主意所调用的任何艺术,而且完全不用担心其余线程会损坏它的工作。TransactionScope
会将眼下的 Transaction 存款和储蓄到线程静态字段中。当稍后实例化 SqlCommand
时(在此 TransactionScope 从线程局地存款和储蓄中剔除以前),该 SqlCommand
会检查线程静态字段以搜寻现有 Transaction,如若存在则列入该 Transaction
中。通过那种格局,TransactionScope 和 SqlCommand
可以协同工作,从而开发人士不必将 Transaction 呈现传递给 SqlCommand
对象。实际上,TransactionScope 和 SqlCommand 所使用的建制相当复杂。

初稿链接:

 

时间 2013-08-12 19:59:34  5一CTO推荐博文

原文  http://cnn237111.blog.51cto.com/2359144/1271600

在.net
一.一的时期,还尚未TransactionScope类,由此不少有关业务的处理,都付出了SqlTransaction和SqlConnection,每个Transaction是基于每一个Connection的。那种陈设对于超越多个程序集恐怕三个法子的政工商银行为的话,不是老大好,须要把作业和数据库连接作为参数字传送入。

在.net
二.0后,TransactionScope类的出现,大大的简化了业务的宏图。示例代码如下:

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                t.ADD();
                ts.Complete();
            }
        }

只须求把需求工作包裹的逻辑块写在using (TransactionScope ts = new
TransactionScope())中就能够了。从那种写法能够见见,TransactionScope实现了IDispose接口。除非呈现调用ts.Complete()方法。不然,系统不会自行提交那个事情。要是在代码运转退出那几个block后,还未调用Complete(),那么事务自动回滚了。在那个事情块中,u.ADD()方法和t.ADD()方法内部都未曾运用任何事务类。

TransactionScope是基于当前线程的,在方今线程中,调用Transaction.Current方法能够看来眼下工作的音讯。具体有关TransactionScope的选择办法,已经它的积极分子方法和总体性,能够查阅 MSDN.aspx) 。

TransactionScope类是能够嵌套使用,即使要嵌套使用,要求在嵌套事务块中钦赐TransactionScopeOption参数。默许的这么些参数为Required。

该参数的现实意思能够参照

例如下边代码:

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.Required))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
               ts.Complete();
            }
        }

当嵌套类的TransactionScope的TransactionScopeOption为Required的时候,则能够见见如下结果,他们的工作的ID都以同二个。并且,只有当三个TransactionScope都complete的时候才能算真的打响。

威尼斯人线上娱乐 6

比方把TransactionScopeOption设为RequiresNew,则嵌套的事务块和外围的事务块各自独立,互不影响。

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
              ts.Complete();
            }
        }

威尼斯人线上娱乐 7

可以见到,他们的业务id是不等同的。

TransactionScopeOption设为Suppress则为撤废当前区块的事体,一般很少使用。

对于五个例外服务器之间的数据库操作,TransactionScope依赖DTC(Distributed
Transaction Coordinator)服务做到工作一致性。

唯独对于单一服务器数据,TransactionScope的编写制定则相比复杂。首要用的的是线程静态本性。线程静态特性ThreadStaticAttribute让CL昂Cora知道,它标志的静态字段的存取是依靠当前线程,而单独于任何线程的。既然存款和储蓄在线程静态字段中的数据只对存储该多少的同一线程中所运转的代码可知,那么,可应用此类字段将别的数据从3个主意传递到该第1个章程所调用的别样艺术,而且完全不用担心其余线程会破坏它的劳作。TransactionScope
会将日前的 Transaction 存款和储蓄到线程静态字段中。当稍后实例化 SqlCommand
时(在此 TransactionScope 从线程局地存储中剔除从前),该 SqlCommand
会检查线程静态字段以搜寻现有 Transaction,假设存在则列入该 Transaction
中。通过那种艺术,TransactionScope 和 SqlCommand
能够协同工作,从而开发职员不必将 Transaction 呈现传递给 SqlCommand
对象。实际上,TransactionScope 和 SqlCommand
所使用的建制十分复杂。具体能够参考小说

Wrox出版的《Professional C# 四 and .NET
四》也有关于TransactionScope的片段选用方法的介绍。

在.net
一.1的1世,还未曾TransactionScope类,因而不少关于业务的拍卖,都付出了SqlTransaction和SqlConnection,每一种Transaction是依照每一种Connection的。那种设计对于超过多少个程序集恐怕多个办法的业务行为来说,不是那些好,须要把业务和数据库连接作为参数字传送入。

在.net
一.1的一代,还尚未TransactionScope类,因而不少有关业务的处理,都交给了SqlTransaction和SqlConnection,各个Transaction是依照每个Connection的。这种布署对于超过多少个程序集大概两个主意的事体行为的话,不是不行好,须求把工作和数据库连接作为参数传入。

在.net
2.0后,TransactionScope类的产出,大大的简化了事情的设计。示例代码如下:

在.net
贰.0后,TransactionScope类的面世,大大的简化了业务的筹划。示例代码如下:

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                t.ADD();
                ts.Complete();
            }
        }
     static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                t.ADD();
                ts.Complete();
            }
        }

只须要把须要工作包裹的逻辑块写在using (TransactionScope ts = new
TransactionScope())中就足以了。从那种写法能够看到,TransactionScope落成了IDispose接口。除非展现调用ts.Complete()方法。否则,系统不会自动提交这些业务。倘若在代码运营退出这些block后,还未调用Complete(),那么事务自动回滚了。在那个工作块中,u.ADD()方法和t.ADD()方法内部都未曾选拔任何事务类。

  

TransactionScope是依照当前线程的,在时下线程中,调用Transaction.Current方法能够见到眼下业务的新闻。具体有关TransactionScope的采纳方法,已经它的成员方法和性质,能够查阅 MSDN.aspx) 。

只须求把需求工作包裹的逻辑块写在using (TransactionScope ts = new
TransactionScope())中就能够了。从那种写法能够看看,TransactionScope完结了IDispose接口。除非显示调用ts.Complete()方法。不然,系统不会自行提交这些工作。假若在代码运转退出这一个block后,还未调用Complete(),那么事务自动回滚了。在这一个事情块中,u.ADD()方法和t.ADD()方法内部都并未有动用任何事务类。

TransactionScope类是足以嵌套使用,假使要嵌套使用,须要在嵌套事务块中钦赐TransactionScopeOption参数。默许的那几个参数为Required。

TransactionScope是依据当前线程的,在方今线程中,调用Transaction.Current方法能够观察眼下工作的新闻。具体有关TransactionScope的利用办法,已经它的分子方法和属性,能够查阅MSDN.aspx) 。

该参数的具体意思能够参考

TransactionScope类是足以嵌套使用,如若要嵌套使用,须求在嵌套事务块中钦赐TransactionScopeOption参数。暗中认可的这些参数为Required。

譬如说上边代码:

威尼斯人线上娱乐,该参数的具体意思能够参考

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.Required))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
               ts.Complete();
            }
        }

诸如上边代码:

当嵌套类的TransactionScope的TransactionScopeOption为Required的时候,则足以见见如下结果,他们的工作的ID都是同一个。并且,唯有当三个TransactionScope都complete的时候才能算真的成功。

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.Required))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
               ts.Complete();
            }
        }

威尼斯人线上娱乐 8

  

借使把TransactionScopeOption设为RequiresNew,则嵌套的事务块和外围的事务块各自独立,互不影响。

当嵌套类的TransactionScope的TransactionScopeOption为Required的时候,则能够看到如下结果,他们的事情的ID都以同二个。并且,只有当一个TransactionScope都complete的时候才能算真的打响。

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
              ts.Complete();
            }
        }

威尼斯人线上娱乐 9

威尼斯人线上娱乐 10

只要把TransactionScopeOption设为RequiresNew,则嵌套的事务块和外围的事务块各自独立,互不影响。

能够看看,他们的事体id是不壹样的。

static void Main(string[] args)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                userBLL u = new userBLL();
                TeacherBLL t = new TeacherBLL();
                u.ADD();
                using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);
                    t.ADD();
                    ts2.Complete();
                }
              ts.Complete();
            }
        }

TransactionScopeOption设为Suppress则为废除当前区块的业务,壹般很少使用。

  

对于多少个不等服务器之间的数据库操作,TransactionScope依赖DTC(Distributed
Transaction Coordinator)服务做到业务壹致性。

威尼斯人线上娱乐 11

然则对于单一服务器数据,TransactionScope的体制则相比复杂。重要用的的是线程静态天性。线程静态天性ThreadStaticAttribute让CL中华V知道,它标志的静态字段的存取是借助当前线程,而独立于其余线程的。既然存款和储蓄在线程静态字段中的数据只对存款和储蓄该数量的同一线程中所运营的代码可知,那么,可选择此类字段将其它数据从1个艺术传递到该第壹个法子所调用的任何办法,而且完全不用担心其它线程会损坏它的工作。TransactionScope
会将如今的 Transaction 存款和储蓄到线程静态字段中。当稍后实例化 SqlCommand
时(在此 TransactionScope 从线程局地存款和储蓄中删去在此之前),该 SqlCommand
会检查线程静态字段以搜寻现有 Transaction,假设存在则列入该 Transaction
中。通过那种办法,TransactionScope 和 SqlCommand
能够协同工作,从而开发人士不必将 Transaction 呈现传递给 SqlCommand
对象。实际上,TransactionScope 和 SqlCommand
所使用的编写制定分外复杂。具体可以参照文章

能够看到,他们的事务id是不1样的。

Wrox出版的《Professional C# 4 and .NET
四》也有关于TransactionScope的片段利用格局的牵线。

TransactionScopeOption设为Suppress则为收回当前区块的事务,一般很少使用。

 

对此八个例外服务器之间的数据库操作,TransactionScope依赖DTC(Distributed
Transaction Coordinator)服务到位工作1致性。

要是您觉得小说有用,也得以给水发个微信小额红包鼓励鼓励!!!

不过对于单一服务器数据,TransactionScope的机制则相比较复杂。首要用的的是线程静态天性。线程静态性情ThreadStaticAttribute让CLCRUISER知道,它标志的静态字段的存取是注重当前线程,而独立于别的线程的。既然存款和储蓄在线程静态字段中的数据只对存款和储蓄该数量的同一线程中所运转的代码可知,那么,可利用此类字段将别的数据从一个措施传递到该第一个主意所调用的此外格局,而且完全不用担心此外线程会损坏它的工作。TransactionScope
会将近年来的 Transaction 存款和储蓄到线程静态字段中。当稍后实例化 SqlCommand
时(在此 TransactionScope 从线程局地存款和储蓄中去除在此以前),该 SqlCommand
会检查线程静态字段以搜寻现有 Transaction,若是存在则列入该 Transaction
中。通过那种格局,TransactionScope 和 SqlCommand
能够协同工作,从而开发职员不必将 Transaction 展现传递给 SqlCommand
对象。实际上,TransactionScope 和 SqlCommand
所使用的编写制定分外复杂。具体能够参照文章 

威尼斯人线上娱乐 12

Wrox出版的《Professional C# 四 and .NET
四》也有关于TransactionScope的有个别利用模式的介绍。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图