目录
前言
目前阶段C#连接Oracle 数据库主要有两种方式,一种是通过Oracle.DataAccess.dll 方式访问,一种是通过Oracle.ManagedDataAccess.dll方式访问。
一般而言,Oracle.DataAccess.dll 位于Oracle安装目录下的 ODE.NET\bin路径中(例如:D:\oracle\19chome\WINDOWS.X64_193000_db_home\ODE.NET\bin),就调用Oracle.DataAccess.dll 而言,Oracle很早就开始提供相应的文件支持,从10g到19c 的相应版本都有所不同。另外,为了应对微软的Framework框架的差异,Oracle在各个版本均针对性的发布了2.x与4两个版本。在使用C#连接Oracle的开发过程中,如果使用不当,会造成很多莫名的问题。
编译过程-处理器架构不匹配
问题现象
在C#的工程中引入Oracle.DataAccess.dll 后,使用Visual studio工具进行编译时,在输出端会出现如下警告:
警告 所生成项目的处理器架构“MSIL”与引用“Oracle.DataAccess, Version=2.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64”的处理器架构“AMD64”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的目标处理器架构,以使您的项目与引用间的处理器架构保持一致,或者为引用关联一个与您的项目的目标处理器架构相符的处理器架构。
原因
默认情况下编译环境采用的是32位的编译机制,如果采用了64位的Oracle.DataAccess.dll 文件(不论是Oracle的12c还是什么其他版本),都会出现类似警告。
解决措施
将解决方案调试平台调整为X64平台。
在Visual Studio 的界面中
调整为
调整完成后,重新编译,警告消失。
发布过程问题-处理器架构不匹配
问题现象
发布过程中出现错误
原因
默认情况下发布环境采用的也是32位的编译机制,如果采用了64位的Oracle.DataAccess.dll 文件(不论是Oracle的12c还是什么其他版本),都会出现类似错误。
解决措施
选择发布时的X64配置
选择并保存后,重新发布,错误消失。
部署过程问题-未能加载程序
问题现象
在IIS部署后,在浏览器中打开时出现错误,提示找不到指定的文件
或提示试图加载格式不正确的程序
原因
- 采用了32位的Oracle.DataAccess.dll文件
- 工程引用的Oracle.DataAccess.dll文件与部署服务器中的的Oracle环境对应的Oracle.DataAccess.dll文件版本不一致。
解决方案
首先确认引用的Oracle.DataAccess.dll文件与部署服务器中Oracle的相关版本一致,通过查看文件属性的详细信息来确认。
其次确认部署服务器中Oracle的相关版本位数是否为32位,如果是32位,则需要打开对应应用程序池的高级设置,启用32位应用程序
总结
在C#访问Oracle的过程中,需要注意版本与位数的种种不协调情况,遇到问题,冷静处理就可以了。
大家可以关注我的微信公众号,查看类似的问题。