我們有一些使用BDE通過SQL Server本機客戶端ODBC驅動程序(2005版)訪問SQL Server 2008的Delphi代碼。我們的問題是我們在循環插入多個表時遇到了一些死鎖問題。BDE,Delphi,ODBC,SQL本機客戶端和死鎖
整個循環在[TDatabase] .StartTransaction中完成。看看SQL Server Profiler,我們清楚地看到,在循環過程中的某一點,SPID(會話ID?)發生了變化,然後我們自然而然地陷入了僵局。 (兩個SPID執行插入到相同的表)
好像在某些時候確實BDE向DB第二連接...
(雖然我很想跳過BDE,它目前不可能)
任何有經驗的人都可以分享?
爲什麼你沒有使用ADO? – 2010-03-24 10:14:02
因爲代碼庫大約13歲,並且嚴重依賴於BDE。此外,我們需要支持Interbase和MSSQL。 – EspenS 2010-03-24 13:49:19
當你說「spid變更」時,我有點困惑。這也許是一個死鎖的原因..你不能在一個SPID啓動一個事務,並嘗試做插入在不同的一個或一個不同結束交易。你知道你如何結束兩個spids?你不是多線程,那麼你是否創建了第二個數據庫連接? – 2010-03-25 12:41:34