C# 访问Oracle数据库

Posted Hello 寻梦者!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 访问Oracle数据库相关的知识,希望对你有一定的参考价值。

  关于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

  

 

      

以上是关于C# 访问Oracle数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# .NET 访问 Oracle 多维数据集中的 OLAP 数据?

C#的EF框架怎么连接Oracle数据库

C#连接Oracle的时候,Oracle.DataAccess.dll能连接数据库,Oracle.ManagedDataAccess却不能?

Java jdbc访问sqlserver,oracle数据库

关于Oracle Spatial的数据格式 C#

Oracle 数据访问 ORA-06512: 字符串缓冲区太小