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

Vai*_*ain 17 .net c# sql ado.net ms-access

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

我有下面提到的情况.

插入Tbl1
插入Tbl2

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

Dav*_*ton 14

在答案中没有人真正给你任何代码示例,或者甚至引用了一个例子(但是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
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*llo 11

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

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

BEGIN TRANSACTION
Run Code Online (Sandbox Code Playgroud)

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

COMMIT [TRANSACTION | WORK]
Run Code Online (Sandbox Code Playgroud)

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

ROLLBACK [TRANSACTION | WORK]
Run Code Online (Sandbox Code Playgroud)

  • begin transaction,commit和rollback由jet引擎支持,所以如果你通过jet使用.mdb文件(在程序中从ADO调用),它可以是access97或更高版本.@ leeand00 (4认同)