C# 我们在MS Access中有事务处理吗?

C# 我们在MS Access中有事务处理吗?,c#,.net,sql,ms-access,ado.net,C#,.net,Sql,Ms Access,Ado.net,我正在使用.NET和MS Access开发一个小型桌面应用程序。我以前没有MS Access的任何经验。我想知道我们是否可以在Ms Access中使用事务 我有下面提到的情况 插入Tbl1插入Tbl2 我只想在tbl1插入成功时插入tbl2。如果在tbl2中插入时出现异常,我想回滚tbl1中的插入。 我知道这在sql server中很容易实现,但对于ms access,我应该如何管理它。 请帮忙,提前谢谢。看起来我们是这样做的: 事务不会自动启动。要启动事务,必须使用以下命令显式启动: BEG

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

我有下面提到的情况

插入Tbl1
插入Tbl2

我只想在tbl1插入成功时插入tbl2。如果在tbl2中插入时出现异常,我想回滚tbl1中的插入。
我知道这在sql server中很容易实现,但对于ms access,我应该如何管理它。 请帮忙,提前谢谢。

看起来我们是这样做的:

事务不会自动启动。要启动事务,必须使用以下命令显式启动:

BEGIN TRANSACTION
通过提交事务期间执行的所有工作来完成事务:

COMMIT [TRANSACTION | WORK]
ROLLBACK [TRANSACTION | WORK]
通过回滚事务期间执行的所有工作来完成事务:

COMMIT [TRANSACTION | WORK]
ROLLBACK [TRANSACTION | WORK]

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


即使如此,如果可能的话,我也会使用SQLServerExpress。它是免费的,比Access功能强大得多。

没有人在答案中给出任何代码示例,甚至没有人引用过示例(不过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中工作)

我本来会使用sqlserver,但我的客户端要求使用pendrive运行此应用程序。直接即插即用。他不想在他的电脑上安装任何软件。SQL Server Compact edition像Access一样可嵌入,但仍像SQL Server一样运行,尽管有些功能不可用。-1代表SQL Server Express建议。为什么您会认为“比访问更强大”在这里(或任何地方)是相关的?当然,在某些情况下,SQL Server将比Jet/ACE更合适,但这与事务支持问题完全正交。@David-W-Fenton-我刚刚查看了您的网站。现在我明白你为什么不喜欢我的评论了。你是一个访问顾问!好吧,我坚持我的意见。在几乎所有级别上,SQL Server Express或Compact Edition都将是比Access更好的选择。作为Access顾问,我有一些客户机,数据存储在SQL Server或SQL Server Express中。关键是,在某些情况下,它是适当的,而在另一些情况下,它不是。您似乎对SQL Server everywhere抱着一种态度,除非您明确指定应该引起切换的考虑因素,否则它将毫无帮助或用处。你听起来像一个Access顽固分子,这可能不正确,但你最初的回答和你在这里的评论并没有让人觉得你有合理的理由建议从Jet/ACE后端切换。Access事务的一些注意事项:Access没有事务,因为Access不是数据库引擎。Jet/ACE(Access的默认数据库引擎)支持提交/回滚,只要我使用过它(从JET2.x开始,例如1996年)。它从来都不支持事务日志记录,而且可能永远也不会支持(我知道这不是您要问的问题,但许多从服务器数据库背景来到Jet/ACE的人对术语“事务”的含义相当模糊,很难理解Jet/ACE支持一个而不是另一个).好的,Access 2007支持它,但是Access 2003呢?开始事务、提交和回滚由jet引擎支持,所以如果通过jet使用.mdb文件(在程序中从ADO调用),它可以是access97或更高版本@利昂00