我们在MS-Access中有交易吗?

我正在使用C#.NET和MS-Access开发一个小型桌面应用程序。 我没有任何MS-Access的经验。 我想知道我们是否可以在Ms-Access中使用事务。

我有下面提到的情况。

插入Tbl1
插入Tbl2

我想只在插入tbl1成功时插入tbl2。 如果在tbl2中插入期间有一些exception,我想在tbl1中回滚插入。
我知道这可以很容易地在sql-server中实现,但是在ms-access的情况下,我应该如何管理它。 请帮助,提前致谢。

它看起来像我们这样做: MSDN – TRANSACTION语句(Microsoft Access SQL)

交易不会自动启动。 要启动事务,您必须明确使用:

BEGIN TRANSACTION 

通过提交事务期间执行的所有工作来结束事务:

 COMMIT [TRANSACTION | WORK] 

通过回滚事务期间执行的所有工作来结束事务:

 ROLLBACK [TRANSACTION | WORK] 

在答案中没有人真正给你任何代码示例,或者甚至引用了一个示例(但是Access帮助文件确实包含了示例)。 要记住的关键问题是Jet / ACE(Access不支持事务本身 – 它取决于您使用的任何数据库引擎),事务是在工作区级别控制的。 您可以为事务创建新工作区或创建新工作区。 这是一些示例代码:

  On Error GoTo errHandler Dim wrk As DAO.Workspace Dim db As DAO.Database Dim lngInvoiceID As Long Set wrk = DBEngine.Workspaces(0) Set db = wrk.OpenDatabase(CurrentDb.Name) With wrk .BeginTrans db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0) db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError .CommitTrans Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID End With exitRoutine: If Not (db Is Nothing) Then db.Close Set db = Nothing End If Set wrk = Nothing Exit Sub errHandler: MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction" wrk.Rollback Resume exitRoutine 

(在Access中测试和工作的代码)

是Microsoft Access支持事务,它们工作得很好。 几年前,我使用Access作为我的数据库构建了一个商业POS应用程序,并且事务支持工作得非常好。

即便如此,如果可能的话,我会使用SQL Server Express。 它比Access更自由,更强大。