我正在開發使用C#.NET和MS-訪問一個小的桌面應用程序。我沒有任何MS-Access的經驗。我想知道我們是否可以在Ms-Access中使用交易。我們在MS-Access中有交易嗎?
我下面提到的情況。
插入在TBL 1
插入在TBL2
我想在tbl2的插入,只有當插入TBL 1成功。如果在插入tbl2期間有一些異常,我想要在tbl1中回滾插入。
我知道這可以很容易地在SQL服務器來實現,但在MS-接入的情況下,我應該如何管理這個。 請幫助,在此先感謝。
我正在開發使用C#.NET和MS-訪問一個小的桌面應用程序。我沒有任何MS-Access的經驗。我想知道我們是否可以在Ms-Access中使用交易。我們在MS-Access中有交易嗎?
我下面提到的情況。
插入在TBL 1
插入在TBL2
我想在tbl2的插入,只有當插入TBL 1成功。如果在插入tbl2期間有一些異常,我想要在tbl1中回滾插入。
我知道這可以很容易地在SQL服務器來實現,但在MS-接入的情況下,我應該如何管理這個。 請幫助,在此先感謝。
它看起來像我們這樣做:MSDN - TRANSACTION Statement (Microsoft Access SQL)
交易不會自動啓動。要開始交易,你必須這樣做明確使用:
BEGIN TRANSACTION
通過提交事務期間執行的所有工作成交:
COMMIT [TRANSACTION | WORK]
通過回滾事務期間執行的所有工作成交:
ROLLBACK [TRANSACTION | WORK]
好吧,Access 2007支持它,但Access 2003呢? – leeand00
開始事務,提交和回滾由噴氣發動機的支載,因此,如果您使用過的噴射流的.mdb文件(從ADO調用程序),它可以是ACCESS97以上。@ leeand00 –
是Microsoft Access支持事務,它們工作得很好。幾年前,我使用Access構建了一個商業POS應用程序作爲我的數據庫,並且事務支持工作得很好。
即使如此,如果可能的話,我會使用SQL Server Express。它是免費的,比Access更強大。
我會使用sqlserver,但我的客戶端需要使用pendrive運行此應用程序。直接即插即用。他不想在他的電腦上安裝任何軟件。 –
SQL Server Compact版本像Access一樣可嵌入,但仍像SQL Server一樣運行,但有些功能不可用。 – David
okk,那對我的應用程序來說會很棒。你的意思是我不必在客戶端PC上安裝任何.net組件。 (除了.net框架) – 2010-01-16 18:45:11
在答案中甚至沒有人給你提供任何代碼示例,甚至還沒有引用示例(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內工作)獲取交易
此工作的訪問版本是什麼? – leeand00
一些注意事項:http://stackoverflow.com/questions/1987696/rollback-multiple-sql-update-queries -in-MS-接入/ 1987718#1987718 – Fionnuala
Access沒有交易,因爲Access不是一個數據庫引擎。 Jet/ACE(Access的默認數據庫引擎)支持提交/回滾,只要我使用它(自Jet 2.x以來,例如1996)。它從來不支持事務日誌記錄,並且可能永遠不會(我認識到這不是你問的問題,但是很多來自服務器數據庫背景的Jet/ACE對於「事務」這個術語的含義頗爲模糊,並且很難時間掌握Jet/ACE支持一個而不是其他)。 –