我正在使用mdb + DAO將大型MS-Access應用程序轉換爲使用SQL Server作爲後端。 到目前爲止,我有合理的成功,但這是一個相當噩夢的項目。 現在有些事情我難倒了近3天:MS-Access外部事務鎖SQL Server表
在Access中,我有以下的代碼片段(適用於簡潔):
Set oWS = DBEngine.Workspaces(0)
oWS.BeginTrans: bInTrans = True
sql = "UPDATE Artikels SET Status_OP = True, Status_OPDatum = #10/04/2014# WHERE Artikelnummer = 50808"
CurrentDb.Execute sql, dbFailOnError
'>> a bunch more business logic goes here
sql = "UPDATE Artikels SET Creatiedatum = #15/11/2002 00:00:01#, Inputdatum = #11/06/2013 15:44:35#, Stockdatum = #28/02/2014 16:16:05#, [Stockdatum A] = #21/06/2011 16:28:59#, Verkoopdatum = #23/10/2013 10:35:06#, Wijzigdatum = #10/04/2014 12:47:18# WHERE Artikelnummer = 50808"
CurrentDb.Execute sql, dbFailOnError
oWS.CommitTransaction
在執行第二條語句,應用程序鎖,直到SQL服務器報告事務超時。 在執行第一條語句之後,我立即注意到Sql Server在表Artikel上放置了一個IX鎖,這顯然導致第二條語句失敗。
當我刪除交易,一切運行良好。但是,所有語句都需要成爲一個事務的一部分(爲簡潔起見,回滾BL被省略)。
我一直在閱讀很多隔離級別,但我覺得這不是解決方案的來源。默認的READ COMMITTED似乎非常好。 任何人都可以幫助解決這個問題?
1)這是在我的開發機器上,有8Gb RAM和一個小型數據庫。 2)不確定你在這裏的意思。需要更新2列:Status_OP和Status_OPDatum。 3)SELECT語句需要在事務中,因爲它們需要讀取事務內先前語句可能更新的數據。這就是說,問題是連續的2個UPDATE語句導致鎖定表,即使我不在它們之間執行任何其他操作。 4)我很積極。這是在我的開發機器上打開Access數據庫的單個實例。 –