我正在使用 C#.NET和MS-Access 开发一个小型桌面应用程序。我没有任何MS-Access的经验。我想知道我们是否可以在Ms-Access中使用交易。
我有下面提到的情况。
插入Tbl1中插入Tbl2
我想仅在tbl1中的插入成功时插入tbl2。如果在插入tbl2期间出现一些异常,我想在tbl1中回滚插入。
我知道这可以很容易地在sql-server中实现,但是在ms-access的情况下,我应该如何管理它。
请帮助,提前致谢。
答案 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更自由,更强大。