如何检查我是否在交易中?

时间:2010-01-06 08:26:19

标签: c# tsql sqlite ado.net transactions

我最近扩展了一段代码但现在必须使用交易。看起来它只能在交易中访问,但看起来并不能让我感到舒服。使用SQLite和ADO.NET我写了if(cmd.Transaction==null)但它在一个事务中是null。我该怎么检查?

注意:我将来会在TSQL中使用此代码。这是一个使用SQLite的快速原型

-edit-我正在考虑嵌套事务,但是这段代码生成了一段sql并使用命令来添加参数。因此,添加嵌套事务需要进行大量修改。

1 个答案:

答案 0 :(得分:3)

根据SQL的性质及其在应用程序中的适用性,您可能更适合嵌套事务,确保无论调用的上下文如何都存在事务。

例如,您可以将调用代码包装在TransactionScope块中。如果存在交易,则这对操作没有实际影响。如果没有事务存在,它将创建一个事务并确保ADO.NET代码参与事务。

只有当您对将SQL作为单个操作执行感到高兴时,此方法才有效。如果它只应作为更大事务的一部分调用,这种方法无济于事。

要确定事务是否存在,您必须检查ADO.NET命令上的显式事务(如上所述)以及System.Transactions编程模型中是否存在环境事务使用Transaction.Current属性。