2012-01-09 119 views
2

我們正在將傳統VB6應用程序從Sybase後端遷移到SQL Server 2008 R2。大多數應用程序正在進行轉換,但是我有一個應用程序使用命名事務在代碼中使用嚴格的事務控制。基於一些徹底的測試,似乎客戶端或服務器根本不支持「開始」,「提交」和「回滾」命令。ADODB中針對傳統VB6應用程序的事務支持

執行這樣的命令:

conSQL.Execute "begin tran CaptureSch" ', , adExecuteNoRecords 

,然後用@@ TRANCOUNT以下它總是產生0。另外,在以後的代碼提交事務的任何嘗試會產生3902錯誤。

使用這個命令:

conSQL.BeginTrans 

確實出現了產生某種行爲的變化,但將@@ trancount仍然是零,而且這種方法不支持嵌套事務,這是什麼是必需的代碼。

我試圖改變隱式事務模式,各種連接字符串參數,更無濟於事。有沒有人有關於如何使這種類型的功能工作的任何建議?我在網上找到的這種類型的功能樣本表明,如果在代碼中明確執行,嵌套命名事務是受支持的。

感謝您的幫助。

回答

0

好了,一堆的測試之後,事實證明,如果你使用(類型的至少一個)遊標中讀取在VB中,它似乎扔掉了所有與交易有關的規定:

rec.Open test_query, cn, adOpenStatic, adLockReadOnly 

所以在這種通過刪除此語句中的adOpenStatic CursorType,事務控制(開始tran,提交tran等)再次開始工作。我正在研究我有哪些其他替代方案可用於返回記錄集導航,但是我可以在測試應用程序中重複此錯誤/問題。

我也在這裏交叉發佈: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/4933d0b0-d4a1-4692-851a-ef7a8be7b966