在Sql Compact Edition 3.5上使用TransactionScope进行的事务

时间:2009-09-18 18:33:41

标签: ado.net transactions sql-server-ce

我有疑问我正在以win Forms开发小型桌面应用程序。我正在使用SQL CE 3.5 SP1作为数据库。

当我通过几种方法在几张桌子上插入时,我正在使用TansactionScope。当我单独使用这种方法时,我想从数据库连接中使用正常的Transaction。

如果DB的连接现在处于事务范围内,那么无论如何都要检入被调用的方法吗?

将此信息转发给方法的答案将来不太好我们会将SQL Ce的实现更改为普通SQL,然后我不会改变实现,所以这不是个好主意。

我在ADO的每个mthod事务中使用之前的解决方案但是因为外部是错误的事务而且事务实验室没有回滚此事务。所以我决定删除所有ADO事务,然后回滚就可以了,所以我不知道何时可以使用ADO,何时不能...

1 个答案:

答案 0 :(得分:2)

我不确定这些是否适用于Compact Edition 3.5,但这与SQL Server的其他版本一样:

XACT_STATE()报告会话的事务状态,指示会话是否具有活动事务,以及事务是否能够提交。它返回三个值:

  • 1,会话有一个活动的事务。会话可以执行任何操作,包括写入数据和提交事务。
  • 0,会话没有活动的事务。
  • -1,会话具有活动事务,但是发生了导致事务被归类为不可提交事务的错误。会话无法提交事务或回滚到保存点;它只能请求完全回滚事务。在回滚事务之前,会话无法执行任何写入操作。会话只能在回滚事务之前执行读取操作。事务回滚后,会话可以执行读取和写入操作,并可以开始新事务。

@@ TRANCOUNT 返回当前连接的活动事务数。

  • 0,不在交易中
  • 1,在交易中
  • n,在嵌套事务中

编辑基地不要OP的评论 试试这个问题:

SELECT
    *
    FROM sys.dm_tran_session_transactions
    WHERE session_id=@@SPID

或者这样可以获得更多信息:

SELECT
    *
    FROM sys.dm_tran_session_transactions             s
        INNER JOIN sys.dm_tran_active_transactions    a On s.transaction_id=a.transaction_id
    WHERE s.session_id=@@SPID