前一阵贴了一个关于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()
}
上述代码,其实是没有参与任何事务的。对于子事务而已也是一样,只要保证事务登记在事务范围内才正确
我是查看了数据库中打开连接的情况才知道上面的原理。真是惭愧的很.
分享到:
相关推荐
如果TransactionScope实例在没有调用`Complete()`方法的情况下被释放,那么事务会自动回滚。反之,如果调用了`Complete()`,事务会在离开作用域时提交。这种机制简化了事务管理,避免了显式地开始和结束事务。 4. ...
在.NET框架中,事务(Transaction)是用于管理...在设计和实现高可用性和数据一致性的应用程序时,理解和正确使用事务是非常关键的技能。通过深入学习和实践,开发者可以更好地应对复杂系统中的并发和故障恢复问题。
1. 使用TransactionScope类创建一个事务范围,这会自动管理底层的数据库事务。 2. 在事务范围内执行SQL操作。 3. 如果所有操作成功,TransactionScope的Dispose方法会提交事务;如果有错误,事务会自动回滚。 示例...
4. **事务处理**:在代理类的`Transfer()`方法中,使用`using (new TransactionScope())`语句创建事务上下文,然后调用服务的`Transfer()`方法。如果所有操作成功,`TransactionScope.Complete()`将提交事务;如果...
3. **开始事务**:使用`BeginTransaction()`方法启动一个新的事务。 ```csharp SqlTransaction transaction = connection.BeginTransaction(); ``` 4. **执行SQL命令**:在事务中执行一系列的SQL命令,这些命令将在...
2. **TransactionScope**: 对于跨越多个数据库或服务的事务,可以使用TransactionScope。TransactionScope会自动创建一个分布式事务,并在所有参与的操作完成后提交,否则将回滚。 ```csharp using (var scope = ...
通过启用MSDTC服务并使用`TransactionScope`,开发者可以方便地在分布式环境中实现这些特性,保证数据在两个系统之间的正确同步和一致性。在实际应用中,还需要考虑到并发控制、性能优化以及可能的故障恢复策略,以...
这是通过使用`using`语句块实现的,当离开这个块时,Dispose方法会调用Complete,从而决定事务的命运。 ```csharp try { // 事务代码 scope.Complete(); // 提交事务 } catch { // 处理异常,事务将在离开using...
5. **TransactionScope使用**:`TransactionScope`类是最常用的方式来实现事务处理。通过创建`TransactionScope`对象,可以开始一个新的事务,并在完成所有操作后调用`Complete`方法来提交事务。如果出现异常,事务...
在IT行业中,尤其是在数据库管理和软件开发领域,事务处理...理解并正确使用事务管理对于构建可靠的Web应用程序至关重要。通过实践和学习管理本地事物的实例,如"管理本地事物p5_7",你可以更深入地掌握这一关键技能。
- 使用try-catch-finally结构来正确处理事务,确保异常时能正确回滚。 通过以上讲解,我们了解了在C#中如何使用Transaction进行事务管理,以及在实际开发中需要注意的关键点。这为编写健壮、可靠的数据库应用程序...
在Spring.NET中,我们可以使用TransactionScope或者DataSourceTransactionManager来管理事务。TransactionScope是.NET Framework提供的分布式事务处理工具,而DataSourceTransactionManager是Spring.NET提供的事务...
例如,当一个已存在事务的方法被另一个也需事务的方法调用时,是使用同一个事务还是开启新的事务?常见的传播行为包括PROPAGATION_REQUIRED(默认,如果已有事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(总是...
使用TransactionScope或数据库特定的BeginTransaction方法开始事务,然后在所有操作成功后提交,或者在出现错误时回滚。 7. 数据绑定与控件:在UI层,ADO.NET数据可以通过DataSource属性绑定到控件,如GridView、...
在这个例子中,`using`语句确保了即使在异常情况下,`TransactionScope`对象也会被正确地释放。实际上,`using`语句在内部使用了`try...finally`结构,确保在任何情况下都能执行`Dispose()`方法。 然而,`...
可以使用BeginPeek和EndPeek方法来实现异步消息接收,或者使用BeginReceive和EndReceive来异步接收消息。这些方法允许在等待消息的同时,ASP.NET可以继续处理其他请求。 在源码中,你可能会看到如何创建和配置...
在C#编程中,事务是确保...理解并正确使用C#中的事务对于编写健壮的数据库应用程序至关重要,因为它能确保在出现错误时,数据不会处于不一致的状态。同时,根据应用的需求选择合适的事务处理方式也是优化性能的关键。
【C#事务的运用】 在开发企业级应用时,事务管理是确保数据一致性与完整性的关键环节。C#作为.NET框架中的主要编程语言,提供了多种处理...正确理解和使用这些事务处理方式,能够确保在MIS系统中实现可靠的数据操作。
MS SQL SERVER驱动是微软公司为连接到SQL Server数据库而设计的一种关键组件,它允许应用程序与SQL Server进行通信,...熟悉这些驱动的工作原理和使用方法,对于任何与SQL Server打交道的开发人员来说都是至关重要的。