.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 也是没有的 根本看不了。 如下图所示。
![](http://img.blog.csdn.net/20170728155615274?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5iYWlsb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20170728155114289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5iYWlsb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
既然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位的呢,令人激动的是网站然没问题了。
![](http://img.blog.csdn.net/20170728160502828?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5iYWlsb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
还有就是微软在4.0以后就舍弃了 Oracle ADO.NET 所以当用OracleConnection OracleCommand 系统 就会有各种波浪线提醒你过时, 其实这个并没有什么卵用,不会影响程序的,千万不要用网上说的什么odp.net ,这个确实oracle 专门为 微软提供的驱动, 但是 要下好多dll 而且要引用,除非对效率要求很高 不然不建议有这个,在3.0一下就不会出波浪线。
Oracle ADO.NET 要用参数的话 符号是“”:” 而不是“”@“” 而且 在参数中不需要加“”:",而且字符类型的 参数必须不能为空 不然会报错, 看下面的例子
![](http://img.blog.csdn.net/20170727165617638?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5iYWlsb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后就没发现别的什么了 总感觉ORACLE 的事很多 动不动就有这个 那个问题,上面的程序我用mysql ADO。net 就不会有这些的问题。 先总结到这 以后遇到了有问题继续说。
这个是我经常遇到的问题 每次还没记性,主要原因就是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 就不会有这些的问题。 先总结到这 以后遇到了有问题继续说。
相关文章推荐
- 使用ADO.net 实体数据模型遇到的问题
- 多数人学习oracle,比如新建实例、使用net configuration assistant,上次我做过这个了,没有问题啊,为什么这次就遇到问题了呢?
- ADO.NET中使用SqlParameter添加参数时遇到的参数无效问题
- 关于使用Entity Framework时遇到的问题 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- 项目使用.NET+Oracle遇到的问题
- 使用Ado.Net 中的OleDbCommand.ExecuteNonQuery()建立过程遇到的问题
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- 使用 ADO.NET 和 Oracle 进行高级数据访问
- 使用VS.NET中遇到的问题:分析器错误信息: 未能加载类型
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- 记录:在ASP.NET中使用ActiveX插件时遇到的问题
- 在使用Asp.net制作网站的时候遇到的问题(二)
- (原創) 是否該使用.NET 2.0的DataSource? (初級) (.NET) (ADO.NET)
- 使用 ADO.NET 和 Oracle 进行高级数据访问
- 使用ADO.NET访问Oracle 9i存储过程
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 在使用Asp.net制作网站的时候遇到的问题(一)