您的位置:首页 > 数据库 > Oracle

.NET 使用ORACLE ADO.NET 经常会遇到的问题

2017-07-27 16:47 507 查看
尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题

这个是我经常遇到的问题 每次还没记性,主要原因就是oracle的客户端要装64位  *并不是System.Data.OracleClient.ll 换成64位!!,System.Data.OracleClient这个就用当前系统自带的就可以。主要还是oracle的客户端的安装,按完环境变量应该是已经配置好了,主要用的是oci.ll。这个是做客户端与oracle连接的程序集。
安装完以后 以为这个问题会解决,结果别没有,依然还是报这个错 。于是我就去服务器中的plsql中查看一下oracle的版本,语法 select * from v$version,但是显示的确实是64位的,ps:网上说的什么 查看任务管理器 看看sqlplus 后面有没有32 来区分 这个纯属是扯淡,还有就是sqlplus/nolog 也是没有的  根本看不了。  如下图所示。





既然oracle版本是64位的还是报这个错, 最终考虑了 iis的配置问题,因为System.Data.OracleClient 这个dll 是引用的.net FrameWork下的dll,FW 由32位和64位的,但是我依然觉得是 .net4.0以上的 oracle 提供的版本是只有32位的。

因为我的工程是4.5的程序集的引用路径为:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.OracleClient.dll。大家都知道Program Files (x86) 里面存放的都是32位的dll 所以4.0以上的提供的 System.Data.OracleClient 就是32位的,所以之前的想法估计也是错的,跟oracle客户端没什么大关系。(后来我又建立了一个4.0以下的版本
,果然引用的是64位的 !!!)

既然跟oracle客户端没关系,微软又搞了一个4.0以上引用 32位这个事,难道就没有解决办法了吗,最终查了一下资料,我最终考虑在网站的链接池上把启动32位程序改为true。这个选项的意思是能将32位置的程序 可以在64位的环境上跑,所以必要的时候还是把这个勾上,说不准你引用的那个程序集是32位的呢,令人激动的是网站然没问题了。



还有就是微软在4.0以后就舍弃了 Oracle ADO.NET  所以当用OracleConnection   OracleCommand 系统 就会有各种波浪线提醒你过时, 其实这个并没有什么卵用,不会影响程序的,千万不要用网上说的什么odp.net ,这个确实oracle 专门为 微软提供的驱动, 但是 要下好多dll 而且要引用,除非对效率要求很高 不然不建议有这个,在3.0一下就不会出波浪线。

Oracle ADO.NET  要用参数的话 符号是“”:”  而不是“”@“”  而且 在参数中不需要加“”:",而且字符类型的 参数必须不能为空 不然会报错, 看下面的例子



然后就没发现别的什么了 总感觉ORACLE 的事很多 动不动就有这个 那个问题,上面的程序我用mysql ADO。net  就不会有这些的问题。 先总结到这  以后遇到了有问题继续说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐