`
javababy1
  • 浏览: 1208736 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

TransactionScope的正确用法

 
阅读更多

前一阵贴了一个关于transactionscope的贴子,以为是MS的BUG。后来经过认真仔细的调试,才找到原因。

原来的代码本身是没有没问题的。只是关于事务资源的处理放错了地方。正确的写法应该如下

如果A类是使用数据库资源的。

class A

{

SqlConnection cn=null;

public A()

{

.....

cn.open();

}

}

//开始事务

using(transactionscope scope=new transactionscope())

{

//要确保对支持事务的资源的登记放在此范围内,如数据库资源的打开

A a=new A();

a.method();

.....

scope.comlete()

}

我们只要确保数据库的打开操作是在事务范围内打开就行了。这样就可以做到事务的正确操作。

以前的代码是因为一个业务对象的初始化操作在外部进行了。尽管后来在事务范围内进行业务操作,也不行.

A a=new A();

using(transactionscope scope=new transactionscope())

{

//要确保对支持事务的资源的登记放在此范围内,如数据库资源的打开

a.method();

.....

scope.comlete()

}

上述代码,其实是没有参与任何事务的。对于子事务而已也是一样,只要保证事务登记在事务范围内才正确

我是查看了数据库中打开连接的情况才知道上面的原理。真是惭愧的很.

分享到:
评论

相关推荐

    C#数据库分布式事物使用

    如果TransactionScope实例在没有调用`Complete()`方法的情况下被释放,那么事务会自动回滚。反之,如果调用了`Complete()`,事务会在离开作用域时提交。这种机制简化了事务管理,避免了显式地开始和结束事务。 4. ...

    事物在.NET中的应用

    在.NET框架中,事务(Transaction)是用于管理...在设计和实现高可用性和数据一致性的应用程序时,理解和正确使用事务是非常关键的技能。通过深入学习和实践,开发者可以更好地应对复杂系统中的并发和故障恢复问题。

    C#调用SQL Server事务的简单实例

    1. 使用TransactionScope类创建一个事务范围,这会自动管理底层的数据库事务。 2. 在事务范围内执行SQL操作。 3. 如果所有操作成功,TransactionScope的Dispose方法会提交事务;如果有错误,事务会自动回滚。 示例...

    WCF写的小例子涉及到WCF中的事务

    4. **事务处理**:在代理类的`Transfer()`方法中,使用`using (new TransactionScope())`语句创建事务上下文,然后调用服务的`Transfer()`方法。如果所有操作成功,`TransactionScope.Complete()`将提交事务;如果...

    C#关于事务的使用和源代码

    3. **开始事务**:使用`BeginTransaction()`方法启动一个新的事务。 ```csharp SqlTransaction transaction = connection.BeginTransaction(); ``` 4. **执行SQL命令**:在事务中执行一系列的SQL命令,这些命令将在...

    ASP.NET事务处理

    2. **TransactionScope**: 对于跨越多个数据库或服务的事务,可以使用TransactionScope。TransactionScope会自动创建一个分布式事务,并在所有参与的操作完成后提交,否则将回滚。 ```csharp using (var scope = ...

    解决分布式事务详细文档

    通过启用MSDTC服务并使用`TransactionScope`,开发者可以方便地在分布式环境中实现这些特性,保证数据在两个系统之间的正确同步和一致性。在实际应用中,还需要考虑到并发控制、性能优化以及可能的故障恢复策略,以...

    分布式LinQ事务

    这是通过使用`using`语句块实现的,当离开这个块时,Dispose方法会调用Complete,从而决定事务的命运。 ```csharp try { // 事务代码 scope.Complete(); // 提交事务 } catch { // 处理异常,事务将在离开using...

    asp.net 事务处理

    5. **TransactionScope使用**:`TransactionScope`类是最常用的方式来实现事务处理。通过创建`TransactionScope`对象,可以开始一个新的事务,并在完成所有操作后调用`Complete`方法来提交事务。如果出现异常,事务...

    简单的管理本地事物实例

    在IT行业中,尤其是在数据库管理和软件开发领域,事务处理...理解并正确使用事务管理对于构建可靠的Web应用程序至关重要。通过实践和学习管理本地事物的实例,如"管理本地事物p5_7",你可以更深入地掌握这一关键技能。

    C#中调用Transaction

    - 使用try-catch-finally结构来正确处理事务,确保异常时能正确回滚。 通过以上讲解,我们了解了在C#中如何使用Transaction进行事务管理,以及在实际开发中需要注意的关键点。这为编写健壮、可靠的数据库应用程序...

    spring.net oracle 事务控制

    在Spring.NET中,我们可以使用TransactionScope或者DataSourceTransactionManager来管理事务。TransactionScope是.NET Framework提供的分布式事务处理工具,而DataSourceTransactionManager是Spring.NET提供的事务...

    AOP实现事务的代码

    例如,当一个已存在事务的方法被另一个也需事务的方法调用时,是使用同一个事务还是开启新的事务?常见的传播行为包括PROPAGATION_REQUIRED(默认,如果已有事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(总是...

    【传智播客.Net培训—ADO.Net】3可能遇到的问题.rar

    使用TransactionScope或数据库特定的BeginTransaction方法开始事务,然后在所有操作成功后提交,或者在出现错误时回滚。 7. 数据绑定与控件:在UI层,ADO.NET数据可以通过DataSource属性绑定到控件,如GridView、...

    C#分布式事务的超时处理实例分析

    在这个例子中,`using`语句确保了即使在异常情况下,`TransactionScope`对象也会被正确地释放。实际上,`using`语句在内部使用了`try...finally`结构,确保在任何情况下都能执行`Dispose()`方法。 然而,`...

    ASP.NET中进行消息处理(MSMQ)

    可以使用BeginPeek和EndPeek方法来实现异步消息接收,或者使用BeginReceive和EndReceive来异步接收消息。这些方法允许在等待消息的同时,ASP.NET可以继续处理其他请求。 在源码中,你可能会看到如何创建和配置...

    C#编程之事务用法

    在C#编程中,事务是确保...理解并正确使用C#中的事务对于编写健壮的数据库应用程序至关重要,因为它能确保在出现错误时,数据不会处于不一致的状态。同时,根据应用的需求选择合适的事务处理方式也是优化性能的关键。

    c#事务的运用

    【C#事务的运用】 在开发企业级应用时,事务管理是确保数据一致性与完整性的关键环节。C#作为.NET框架中的主要编程语言,提供了多种处理...正确理解和使用这些事务处理方式,能够确保在MIS系统中实现可靠的数据操作。

    MS SQL SERVVER 驱动

    MS SQL SERVER驱动是微软公司为连接到SQL Server数据库而设计的一种关键组件,它允许应用程序与SQL Server进行通信,...熟悉这些驱动的工作原理和使用方法,对于任何与SQL Server打交道的开发人员来说都是至关重要的。

Global site tag (gtag.js) - Google Analytics