關於C#連接Oracle數據庫 嘗試加載Oracle客戶端時引發BadImageFormatException 如果在安裝32位Oracle客戶端組件的情況下以64位模式運行,將出現此問題


這個問題已經困擾了我快一個月了,各種百度,各種博客,可是,一個個都試過了,什么下載32位客戶端,配置環境變量什么的,純屬扯犢子,開發環境win10 64位    oracle 11g r2 64位,這個問題出現一般是引用了System.Data.OracleClient,這是一個32位的微軟的數據驅動,居然沒有64位,不過好像.net 4.0就沒有了,微軟也不會更新了,於是我就用了Oracle的驅動,也就是Oracle.ManagedDataAccess.dll,這個可以到百度直接去百度下載,然后更換了程序的數據訪問底層,結果發現,當程序連接的人多了就直接報以達到最大連接數,無法分發客戶端目標機了,后來這個問題又是各種百度,說什么把oracle的session設置大一點,反正就是說設置oracle,設置了是好了一點,也有說是什么內存的問題,但是我是64位oracle,所以不是該問題,於是,嘗試了網上的各種方案后,我發現,肯定不是oracle的問題,經過分析發現,當我程序關閉連接,釋放資源時,發現數據庫的會話數並沒有減少,於是我開始找程序的原因,因為使用的是OracleConnection,在.net中這個類是連接池自動管理的,但是我所有的數據庫操作完成后都調用了Close()和Dispose(),按道理來說,這個應該已經關閉並釋放連接資源了,但是oracle會話數就是沒減少,經過各種嘗試,發現Close()和Dispose()只是釋放了OracleConnection,沒有真正的做到釋放連接,這個時候連接池不會回收該連接進行管理,導致每次操作數據庫都是打開一個新的連接,這樣一來,會話數就一直增加,而oracle默認的會話數是100,超過了就提示達到最大會話數,怎么讓程序中操作完數據庫,連接就回到連接池中讓下一個重復使用呢,經過測試發現使用using關鍵字可以解決,即:

using (this.conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString))
{

.......

}

這樣,每次數據庫操作完成,該連接對象就會被連接池回收,等在有對數據庫的操作時,會自動判斷是否有可用連接能復用,這樣一來,就能解決Oracle.ManagedDataAccess 報達到最大連接數而導致系統崩潰的問題了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM