关于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 报达到最大连接数而导致系统崩溃的问题了.

原文地址:https://www.cnblogs.com/jinzhirong/p/8435879.html