关于C#访问Oracle数据库的时候,必须安装Oracle客户端,而且必须安装和服务器相同的版本,否则会出现各种版本的不兼容问题,所以很多时候我们并不需要去安装完整的Oracle客户端,为了方便部署连接oracle的.net程序,oracle官方提供了一个简化版的client,即instant client。通过instant client和ODP.net中的Oracle.DataAccess.dll,我们就可以方便的部署.net应用程序或者站点。
1 下载和服务器对应的instant client版本。
下载的地址如下:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,进入之后下载对应的版本号(首先选择对应的操作系统,然后再选择具体的版本号),下载完成之后就是安装的过程,安装完成后就是详细配置环境变量和配置PL\SQL的过程了,这里也不再赘述,参考一下下面的一片博客:
http://www.linuxidc.com/Linux/2015-02/114226.htm
2 C#访问Oracle数据库
配置好了,关键的问题就是如何去用C#去连接Oracle数据库,然后再去读取数据呢?
这里也有很多种方法,但总结一番也就是使用Oracle官方提供的Oracle.DataAccess.dll或者是托管的Oracle.ManagedDataAccess.dll这些DLL来访问Oracle数据库,下面提供了一种方法来连接数据库。
http://www.cnblogs.com/wang_yb/archive/2011/07/11/2103368.html
弄清楚了这些最基本的原理,我们的思路就会相当明确,无非就是使用Oracle客户端中的核心DLL来访问Oracle数据库服务端,那么究竟需要哪些重要的DLL呢?再看下面的这些专门写这些程序的博客。
http://blog.csdn.net/yenange/article/details/12188731
其实这些DLL在instant client安装完成以后,我们都可以在其安装包中找到,我们可以这么理解instant client就是为.net提供一个精简版的客户端去访问Oracle数据库。这些核心的DLL如下图所示:
其实甚至连安装简易版的客户端都不需要了,了解安装过程应该知道,安装的过程出了设置一些环境变量、写注册表、等其他的操作外,只不过是将安装的文件从安装包拷贝到指定的安装目录中的过程,所以我们甚至只需要在安装包中解压,找到这些DLL中,然后直接拷贝到exe目录中,程序就可以访问Oracle数据库了,具体在哪个目录下,请参考下面的一片博客:
http://blog.csdn.net/ikmb/article/details/5825047
上面的整个分析过程是在阅读大量博客之后做的一个小的总结,关键是要通过实际的安装部署操作才能够真正地去掌握,从而最终吃透这些。
这篇文章除了详细介绍如何一步步化繁为简去访问Oracle数据库以外,另外在64位环境中使用32位Oracle客户端去访问Oracle数据库的时候,还是提示“无法找到或者加载Oracle.DataAccess.dll程序集”这个问题百思不得其解,明明把所有的Oracle核心DLL都拷贝到应用程序中,而且客户端和服务端版本完全匹配的情况下,还是提示这个信息,最后找到了问题的答案,原来是计算机安装64位操作系统,而我们发布程序的时候选择的是Any CPU,这样我们的应用程序也是64位的,这在访问很多32位DLL的时候往往会出现很多的找不到DLL的情况,那么我们对编译的平台 Any CPU、x86、x64到底了解多少呢?
网上也有很多这样的文章,但是一致的结论就是:主程序和其引用的类库在运行时的平台应该保持一致。
那么报出上面的错误也就非常正常了,由于我们发布的主程序的目标平台为:Any CPU 而且我们最终使用的环境为64位操作系统,所以主程序在64位CLR下面运行,当我们全部添加了引用的DLL之后,仍然还是提示“无法找到或者加载Oracle.DataAccess.dll程序集”这类问题的时候就会多了一个分析问题的方向,是否是主程序和类库的版本不匹配的问题,这些小问题都值得我们去深入思考,下面贴出几篇值得参考的相关博客:
http://blog.csdn.net/lordwish/article/details/52312015
http://blog.csdn.net/g710710/article/details/23161807
http://blog.csdn.net/zuguangboy/article/details/51509670