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

时间:2010-01-16 18:21:34

标签: c# .net sql ms-access ado.net

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

我有下面提到的情况。

  

插入Tbl1中插入Tbl2

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

3 个答案:

答案 0 :(得分:13)

在答案中没有人真正给你任何代码示例,或者甚至引用了一个示例(但是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中测试并运行的代码)

答案 1 :(得分:10)

看起来我们这样做:MSDN - TRANSACTION Statement (Microsoft Access SQL)

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

BEGIN TRANSACTION

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

COMMIT [TRANSACTION | WORK]

通过回滚在交易期间执行的所有工作来结束交易:

ROLLBACK [TRANSACTION | WORK]

答案 2 :(得分:1)

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

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