原文地址:http://www.cnblogs.com/jiangguang/archive/2013/02/19/2916882.html

  • 0、首先,从Oracle网站上下载对应版本的Oracle instant client包,网址在这里 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 由于是Windows程序,只需要下载Win32或64版本就行了。
  • 1、下载来的.zip压缩包,解压后应该有如下文件:(我使用的是10G版本,11可能略有不同) classes12.jar oci.dll ocijdbc10.dll ociw32.dll ojdbc14.jar Oracle.DataAccess.dll orannzsbb10.dll oraocci10.dll oraociei10.dll OraOps10.dll 其中Oraociei10.dll体积最大,可能封装了一些资源文件。
  • 2、在你的工程根目录下新建一个”Oracle”的文件夹(最好建在Debug目录下),然后将上述文件拷贝到里边,并在Visual Studio中添加这个文件夹及文件们。保证你的解决方案里能看到它们。
  • 3、在Visual Studio IDE的“解决方案资源管理器”里,打开Oracle文件夹,选中里边所有的文件,在“属性”“复制到输出目录”里设置“如果较新则复制”,这样在编译或者发布程序的时候,Oracle文件夹会随着发布到exe所在的地方,部署时候就不会出现找不到Oracle库的情况。
  • 4、按照网上的大多数教程,这个时候就需要在widnows环境变量里边添加东西了。其实这一步不是必须的,因为考虑到不同的客户环境,有可能用户没有权限在他的计算机上操作这些,那么我们把设置Oracle环境变量放到程序里来做。那么在你初始化程序之后,使用Oracle之前,可以在Program.cs文件里添加如下代码:
    string oraclePath = System.Windows.Forms.Application.StartupPath + @"\Oracle"; 
    Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process);

    解释一下上面的代码: string oraclePath = System.Windows.Forms.Application.StartupPath + @"\Oracle"; 这一句取得了oracle 驱动文件夹的位置,也就是放oci.dll的地方。

    Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process); 这一句设置环境变量“PATH”,写入oracle驱动所在的文件夹,第三个参数表示这个PATH只在当前进程起作用,不会修改电脑本身。 注意:如果你用到某些外部程序,还有其他PATH变量要设置,在这里加入就行了。具体方法参见.net相关文档。

    Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process); 这一句,设置Oracle在通讯过程中使用的语言和字符集。我的项目用的是上面的字符集,对应到你的项目,可用SQL语句去oracle数据库中查询。这个语言和字符集一定要和服务器一致,否则可能会出现乱码甚至无法连接。可能会用到如下SQL语句://select userenv('language') from dual; 查询服务端字符集,用来设置上面的参数。 //select * from nls_database_parameters;//服务器字符集 //select * from nls_instance_parameters;//ora文件定义字符集 //select * from nls_session_parameters; //会话字符集

  • 5、理论上,经过上面的设置,你的程序就可以使用内置到exe目录下的Oracle驱动了,这里要注意的还有就是连接数据库的方式,上面的修改并不能保证你可以使用tns名来连接,因此连接字符串要做如下修改:

    在app.config中修改connectionString为 Persist Security Info=True;User ID=数据库用户名;Password=数据库密码;Unicode=True;Data Source= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 服务器上的数据库实例名))); 这个主要是把“Data Source”这部分直接用tcp/ip字符串方式替换了(通常Data Source是写tns名称的)

  • 6、好了,运行你的程序试试看吧。

最后,如果你还是习惯写tns名称来访问oracle数据库,那么还要做以下工作。 (注意,以下未测试

  • a.在程序的Oracle文件夹下增加tnsnames.ora,并将tns名称的配置写到里边去。
  • b.在程序设置环境变量的地方,加入 Environment.SetEnvironmentVariable("TNS_ADMIN", oraclePath,EnvironmentVariableTarget.Process);
  • c.连接字符串里应该可以使用tns名称了

C#中不用安装Oracle客户端连接Oracle数据库(转)的更多相关文章

  1. 配置ORACLE 客户端连接到数据库

    --================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...

  2. SQL Data Base 不装oracle客户端连接oracle服务端

    SQL Data Base  不装oracle客户端连接oracle服务端 一.直连: devart 二.拷贝dll: Oracle.DataAccess.dlloci.dllociw32.dll

  3. 不安装oracle客户端连接oracle数据库

    PLSQL Developer 或Toad 不安装Oracle 客户端连接数据库 为了简化Oracle在个人电脑的使用,避免占用不必要的资源,可以不安装Oracle客户端.方法是:使用Oracle I ...

  4. Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时

    Oracle 客户端连接Oracle数据库报错   ORA-12170:TNS:连接超时  排错步骤: 1. 查看网络是否畅通:  打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...

  5. atitit.客户端连接oracle数据库的方式总结

    客户端连接oracle数据库的方式总结 目录 Java程序连接一般使用jar驱动连接..... 桌面GUI一般采取c语言驱动oci.dll 直接连接... 间接连接(需要配置tns及其envi var ...

  6. DataUml Design 介绍11 - DataUML 1.5版本功能(支持无Oracle客户端连接,有图有真相)

    DataUML Design1.5版本主要更新内容包括: 1.优化数据库登录界面: 2.查询分析器智能提示: 3.优化数据库浏览插件,数据库登录组件,支持历史记录缓存: 4.支持无Oracle客户端连 ...

  7. phoenix客户端连接hbase数据库报错:Traceback (most recent call last): File "bin/sqlline.py", line 27, in <module> import argparse ImportError: No module named argparse

    环境描述: 操作系统版本:CentOS release 6.5 (Final) phoenix版本:phoenix-4.10.0 hbase版本:hbase-1.2.6 现象描述: 通过phoenix ...

  8. 远程客户端连接MysqL数据库太慢解决方案

    远程客户端连接MysqL数据库太慢解决方案局域网客户端访问mysql 连接慢问题解决. cd /etc/mysql vi my.conf [mysqld] skip-name-resolve 此选项禁 ...

  9. 客户端连接mysql数据库反应慢

    远程客户端连接MysqL数据库太慢解决方案 局域网客户端访问mysql 连接慢问题解决 编辑mysql配置文件 # vi my.conf [mysqld] skip-name-resolve 重启my ...

随机推荐

  1. Oracle 使用Nid 修改数据库的DBID 和 Database Name

    How to Change the DBID, DBNAME Using NID Utility (Doc ID 863800.1) Changing the DBID and Database Na ...

  2. avalon ms-repeat avalon1

    工作原因要用到avalon二次开发, 但是看了下以前的avalon版本是1,现在大多数都是2版本了吧,,所以很多文档不好找,但是大多数还是好用的 ms-repeat 循环当前赋值的, ms-repea ...

  3. Percona-Tookit工具包之pt-mext

      Preface       We are always obliged to analyze many outputs generated by various tools directly ev ...

  4. sql server几种Join的区别测试方法与union表的合并

    /* sql server几种Join的区别测试方法 主要来介绍下Inner Join , Full Out Join , Cross Join , Left Join , Right Join的区别 ...

  5. 并排打印多个图案(C++实现)

    在练习循环控制语句时,经常会遇到一类问题:使用循环控制打印星号(*)来形成各种各样的图案,并强调所有的星号(*)都要用单条的输出语句cout<<"*";来打印. 例如打 ...

  6. filebeat的安装及配置

    概述:Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasti ...

  7. 10.1.2 Document类型【JavaScript高级程序设计第三版】

    JavaScript 通过Document 类型表示文档.在浏览器中,document 对象是HTMLDocument(继承自Document 类型)的一个实例,表示整个HTML 页面.而且,docu ...

  8. 阿里云Linux服务器,挂载硬盘并将系统盘数据迁移到数据盘

    因为之前用宝塔上线,宝塔只挂载了系统盘50G,打开阿里云云盘列表发现系统盘无法直接升级,故另买一块数据盘挂载到Linux服务器下,下面根据网上教程再结合我实际情况讲解一下实际操作,其实非常easy l ...

  9. 线程、进程、协程和GIL(三)

    上一篇文章介绍了:创建线程的两种方式.Event对象判断线程是否启动.利用信号量控制线程并发. 博客链接:线程.进程.协程和GIL(二) 这一篇来说说线程间通信的那些事儿: 一个线程向另一个线程发送数 ...

  10. source insight插件

    直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满足 ...