using (TransactionScope trans = newTransactionScope()) {try{ InsertUserBase();//它插入不成功,自己回滚 UserInfos scope = new TransactionScope(TransactionScopeOption.Required, newTransactionOptions { IsolationLevel is already complete) 如果你正在使用TransactionScope和async/await在一起,你真的应该升级到4.5.1 .NET马上。 一个TransactionScope包装异步代码需要指定TransactionScopeAsyncFlowOption.Enabled在其构造。 scope = new TransactionScope(TransactionScopeOption.Required, option, TransactionScopeAsyncFlowOption.Enabled
using (TransactionScope scope = new TransactionScope()) { scope.Complete(); } 只需要把需要事务包裹的逻辑块写在using (TransactionScope ts = new TransactionScope())中就可以了。 从这种写法可以看出,TransactionScope实现了IDispose接口。除非显示调用ts.Complete()方法。否则,系统不会自动提交这个事务。 TransactionScope是基于当前线程的,在当前线程中,调用Transaction.Current方法可以看到当前事务的信息。
br /> trans.Rollback();
}
}
然而,当我们在使用LINQ to SQL中时,往往会同时使用多个DataContext,此时我们就需要使用TransactionScope 例如:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
的优点 1、使用起来比较方便.TransactionScope可以实现隐式的事务,使你可以在写数据访问层代码的时候不用考虑到事务,而在业务层的控制事务. 2、可以实现分布式事务,比如跨库或MSMQ. 二、TransactionScope缺点 1、性价比不高.比如,你只是在”Scope”里控制一个库的事务.用”TransactionScope”就有点浪费了. 2、一般情况下只要你使用”TransactionScope ”,都要配置MSDTC,要配防火墙,要开139端口.这个端口不可以更改 三、TransactionScope事务级别 在TransactionScope中默认的事务级别是Serializable,即在事务过程中 如果WEB服务器和数据库是在同一台服务器上,TransactionScope使用的是本地事务,这时不需要配置MSDTC。 如果WEB服务器和数据库不在同一台服务器上,TransactionScope会自动提升事务级别为分布式事务,这时就需要配置MSDTC。
using (var scope = new TransactionScope()) { //transctional code… scope.Complete(); } TransactionScope 使用起来简单,只需要把代码写在大括号里,最后加上scope.Complete();就可以了 接下来主要介绍TransactionScope的简单使用 TransactionScope有三个属性:IsolationLevel 的Read Committed进行对比 不使用事务如下: using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required 总结:可以使用TransactionScope的Read Committed隔离等级进行一系列事务操作,性能没有太大影响。 一般不使用TransactionScope默认的Serializable隔离等级,因为它需要开很多锁,性能会因此而下降。
C# 的事务编程 1 Db事务 DbConnection 中创建基于当前连接的 DbTransaction 2 使用TransactionScope ,创建环境事务 一旦创建,在这个环境包含的DbConnection 重要事项 建议您创建使用隐式事务 TransactionScope 类,以便为您自动管理环境事务上下文。 您还应该使用 TransactionScope 和 DependentTransaction 跨多个函数调用或多个线程调用需要使用相同的事务的应用程序的类。 在实例化 TransactionScope 通过 new 语句中,事务管理器确定哪些事务参与进来。一旦确定,该范围将始终参与该事务。 如果在事务范围内未不发生任何异常 (即之间的初始化 TransactionScope 对象并调用其 Dispose 方法),则范围所参与的事务可以继续。
我正在尝试在我的数据库访问类库中使用TransactionScope在需要时执行回滚.另外,在我的测试代码中,我希望在每次测试之前使用TransactionScope将数据库恢复到已知状态.我使用TestInitialize TestCleanup方法来完成此任务.那些看起来像这样: [TestInitialize()] public void MyTestInitialize() { testTransScope = new TransactionScope void MyTestCleanup() { Transaction.Current.Rollback(); testTransScope.Dispose(); } 基于在Initialize函数中构造TransactionScope 我有一个名为AddDessert(DessertBiz dessertBizObject)的函数,其部分看起来像这样: using (var transScope = new TransactionScope 太棒了,所以我想我会改变我的AddDesert方法看起来与上面完全一样,除了我会嵌套一个事务范围而不是使用环境范围,一些我使用的行看起来像这样: using (var transScope = new TransactionScope
本文转载:http://blog.csdn.net/iwteih/article/details/4483372 TransactionScope是个好东西,可以自动管理transaction,即使是对分布式数据库也可以 有人说TransactionScope不支持跨域访问,在我的实验中,是可以跨域的。 关于TransactionScope有几点需要补充: 1. connection 须在TransactionScope内部打开且关闭 2. 执行sql时出现的异常要抛出到TransactionScope,以使得TransactionScope知道发生异常了,准备回滚
只要任意一个 SqlCommand 对象引发异常,程序流控制就会跳出 TransactionScope 的 using 语句块,随后,TransactionScope 将自行释放并回滚该事务。 //创建TransactionScope using (TransactionScope tsCope= new TransactionScope()) { using (SqlConnection 若要更改 TransactionScope 类的默认设置,您可以创建一个 TransactionOptions 对象,然后通过它在 TransactionScope 对象上设置隔离级别和事务的超时时间。 下列代码中使用了默认的 TransactionScope 对象及其默认构造函数。 private void Method1() { using (TransactionScope ts= new TransactionScope(TransactionScopeOption.Required
www.cnblogs.com/ghfsusan/archive/2010/03/23/1692627.html http://www.189works.com/article-85378-1.html 如果在C#中使用TransactionScope 如果WEB服务器和数据库是在同一台服务器上,TransactionScope使用的是本地事务,这时不需要配置MSDTC。 如果WEB服务器和数据库不在同一台服务器上,TransactionScope会自动提升事务级别为分布式事务,这时就需要配置MSDTC。配置很简单的,网上有教程,做两次就知道了。 TransactionScope类 TransactionScope类是framework2.0 新增的一个类,在System.Transactions命名空间中,使用时必须先添加System.Transactions Distributed Transaction Coordinator-->属性-->启动,启动这个服务.示例代码如下: try { using (TransactionScope
如图: 2)使用TransActionScope。 using (TransactionScope tan = new TransactionScope()) { //向第一个数据库的Fm_ArticlePro添加一条数据 RySfEntities 说明:在步骤2)中是使用的隐式方法(使用system.Transactions.TransactionScope类),该方法更加灵活,因此更加适合。
TransactionScope TransactionScope事务处理经常用到,老是用了又忘,做点记录。 TransactionScope的定义跟使用介绍。 ---- TransactionScopeOption TransactionScopeOption枚举型用来决定一个TransactionScope是用已有的事务,还是定义TransactionScope TransactionOptions TransactionOptions 结构体用来设置TransactionScope所用到事务的隔离级别与超时时间。 隔离级别参考这篇博文。 ").Options; } public void Test() { using (var scope = new TransactionScope tasks.Add(Task.Run(() => { using (var scope = new TransactionScope
static void Main(string[] args) { using (TransactionScope ts = new TransactionScope ts = new TransactionScope())中就可以了。 从这种写法可以看出,TransactionScope实现了IDispose接口。除非显示调用ts.Complete()方法。否则,系统不会自动提交这个事务。 TransactionScope是基于当前线程的,在当前线程中,调用Transaction.Current方法可以看到当前事务的信息。 static void Main(string[] args) { using (TransactionScope ts = new TransactionScope
TransactionScope实现了IDisposable方法,Dispose方法具有这样的逻辑:先将当前状态还原成创建TransactionScope之初的状态,在还原之前先将当前事务保存下来。 transactionScope = new System.Transactions.TransactionScope()) 4: { 5: for (int i transactionScope = new Artech.Transactions.TransactionScope("TestDb")) 16: { 17: for 5: 6: 1000 7: System.Transactions.TransactionScope: 140 8: Artech.Transactions.TransactionScope 直接就崩溃了) 1: 100 2: System.Transactions.TransactionScope: 2318 3: Artech.Transactions.TransactionScope
以下来自MSDN: Transaction 类,以及隐式编程模型使用 TransactionScope 类,在其中事务自动管理基础结构。 重要事项 TransactionScope 类,以便为您自动管理环境事务上下文。 TransactionScope 和 DependentTransaction 跨多个函数调用或多个线程调用需要使用相同的事务的应用程序的类。 TransactionScope 对象并调用其 Dispose 方法),则范围所参与的事务可以继续。 如果在事务范围内发生异常,参与到其中的事务将回滚。 using (TransactionScope scope = new TransactionScope()) { using (SqlConnection connection1
在mvc中,事务可以帮我们处理一些复杂的代码,逻辑性出现的问题,当一处数据保存不符合要求,某些地方又需要这处的数据这样就会导致循环的报错。
System.Transactions.IsolationLevel.ReadCommitted; TransOpt.Timeout = new TimeSpan(0, 2, 0); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TransOpt)) { MySqlConnection conn =
catch { // Rollback transaction transaction.Rollback(); } connection.Close(); return result; } } 按照TransactionScope destinationAccount) { bool result = false; Database database = DatabaseFactory.CreateDatabase(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)) { TestCommand1(database, transactionAmount
在实际开发工作中,执行一个事件,然后调用另一接口插入数据,如果处理逻辑出现异常,那么之前插入的数据将成为垃圾数据, 我们所希望的是能够在整个这个方法定义为一个事务,TransactionScope 类提供一个简单方法 TransactionScope对象创建了一个事务,同时将该事务设置给Transaction类的Current属性。 一、TransactionScope的优点 1、使用起来比较方便.TransactionScope可以实现隐式的事务,使你可以在写数据访问层代码的时候不用考虑到事务,而在业务层的控制事务. 2、可以实现分布式事务 二、TransactionScope缺点 1、性价比不高.比如,你只是在"Scope"里控制一个库的事务.用"TransactionScope"就有点浪费了. 2、一般情况下只要你使用"TransactionScope ",都要配置MSDTC,要配防火墙,要开139端口.这个端口不可以更改 3、在Net Core后 TransactionScope已经没有用了,用Net core的请寻找其他解决办法。
分布式隐式事务(TransactionScope) 隐式事务不具有Commit、Roolback方法。 SqlConnection(ConfigurationManager.ConnectionStrings["MySqlServer"].ConnectionString)) { using (TransactionScope ts = new TransactionScope()) { conn.Open(); using (SqlCommand cmd = new SqlCommand Response.Write("Error:" + ex.Message); } } } conn.Close(); } TransactionScope