所以我有一套複雜的代碼(由其他人編寫),它具有在最終執行Commit()更改前執行許多數據庫操作的功能。DbTransaction.Commit回滾,導致代碼中斷?
雖然這裏存在的問題是代碼中存在子函數,它們被調用,如getThis或getThat,它們具有execute()和queryDatabase()函數。代碼在某些情況下(並非所有情況下)都會導致錯誤,它會在此處「執行」或「queryDatabase」中凍結。從本質上講,我認爲這與在提交更改之前代碼需要來自這些queryDatabase命令的數據有關。
刪除數據訪問指針傳遞給這些子函數(因此它們不是提交的一部分)後,突然代碼成功通過。
什麼是正確的方式來使用Commit()或者我應該擺脫它而不使用這些交易功能?讓代碼立即做一切?
我什至不能找到最後的錯誤,只是另一個模糊的「連接參數null」SystemArgumentNullException,它以某種方式連接到它是一個事務。
System.ArgumentNullException: Value cannot be null
Parameter name: connection
at Data.Database.PrepareCommand(DbCommand command, DbConnection connection)
很難張貼的代碼,因爲它跨越了至少20頁不同的文件(是的,原來的開發商不知道KISS)。
我已經做到這一點:如果(_transaction!= NULL){ _transaction.Commit(); } _transaction = NULL; ----我的感覺是交易在這個系統中只是越野車。因爲它在每個queryDatabase或execute()中都會給出錯誤。它不適用於交易。或者,也許某種類型的數據庫類被傳遞給子函數的錯誤,它根本無法工作。 – Dexter
我同意,這聽起來更像是一個系統/設計問題。對於數據庫中的查詢,如果需要,可以在沒有事務的情況下在單獨的連接上打開它們。這聽起來像在那裏混亂。 –
你不會相信有多混亂。但是如果ASP.nET沒有發出這個星球上最糟糕的錯誤,我會更高興:「DataAccessException:System.Data.DataSet queryDatabase(System.String,net.cadat.dataManager.dbConn.StoredProcedureParameter [])System。 NullReferenceException:對象引用未設置爲對象的實例「-----誰知道錯誤在哪裏。它將錯誤指向db類文件(無法知道來自哪裏)。所有的DataAccess都作爲它們的副本傳遞給子函數(不通過引用傳遞),因此以某種方式將其複製到其他函數會導致錯誤。 – Dexter