在C#中,不安装Oracle客户端如何连接Oracle数据库

本方法优点: 1、程序内集成Oracle客户端,无需用户自行进行配置

本方法缺点: 2、增加程序包的体积(Oracle instant client本身有几十兆大小)

下面说一下如何实现。

  • 0、首先,从Oracle网站上下载对应版本的Oracle instant client包,网址在这里 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 由于是Windows程序,只需要下载Win32或64版本就行了。
  • 1、下载来的.zip压缩包,解压后应该有如下文件:(我使用的是11G版本,其他版本可能略有不用) 
  • 2、在你的工程根目录下新建一个”Oracle”的文件夹(其实名字和位置随便定),然后将上述文件拷贝到里边,并在Visual Studio中添加这个文件夹及文件们。保证你的解决方案里能看到它们。
  • 3、在Visual Studio IDE的“解决方案资源管理器”里,打开Oracle文件夹,选中里边所有的文件,在“属性”“复制到输出目录”里设置“如果较新则复制”,这样在编译或者发布程序的时候,Oracle文件夹会随着发布到exe所在的地方,部署时候就不会出现找不到Oracle库的情况。
  • 4、按照网上的大多数教程,这个时候就需要在widnows环境变量里边添加东西了。其实这一步不是必须的,因为考虑到不同的客户环境,有可能用户没有权限在他的计算机上操作这些,那么我们把设置Oracle环境变量放到程序里来做。那么在你初始化程序之后使用Oracle之前,需要添加如下代码: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名称了

整体代码如下:

 // 这一句取得了oracle 驱动文件夹的位置,也就是放oci.dll的地方。
            string oraclePath = System.Windows.Forms.Application.StartupPath + @"\ORCLconn";
            // //这一句设置环境变量“PATH”,写入oracle驱动所在的文件夹,
            // //第三个参数表示这个PATH只在当前进程起作用,不会修改电脑本身。
            // //注意:如果你用到某些外部程序,还有其他PATH变量要设置,在这里加入就行了。具体方法参见.net相关文档。

///当系统还使用其他软件的环境变量时则需要先获取本机电脑上的环境变脸结合Oracle环境变量一起使用。
            string s = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);

            Environment.SetEnvironmentVariable("PATH", s + ";" + oraclePath, EnvironmentVariableTarget.Process);
            // //这一句,设置Oracle在通讯过程中使用的语言和字符集
            Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process);
            // //在程序的Oracle文件夹下增加tnsnames.ora,并将tns名称的配置写到里边去。
            // //b.在程序设置环境变量的地方c.连接字符串里应该可以使用tns名称了

            Environment.SetEnvironmentVariable("TNS_ADMIN", oraclePath, EnvironmentVariableTarget.Process);
时间: 2024-08-05 19:31:09

在C#中,不安装Oracle客户端如何连接Oracle数据库的相关文章

杂记1:不安装Oracle客户端远程连接Oracle的方法

方案是使用Oracle Instant Client: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 步骤一: 到Oracle官方网站下载对应的Instant Client版本,下载basic版本即可,比如我下载的是: instantclient-basic-win32-10.2.0.4.zip 建议再下载sqlplus,以便配置结束后进行测试: instantclient

Linux 免安装oracle客户端软件 连接 oracle数据库

1.mkdir -p /opt/oracle2.cd /opt/oracle3.去oracle官网下载如下三个压缩包(最好下载与orcale服务器对应版本的) 然后传到/opt/oracle目录 oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip      oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.zip     oracle-instantclient11.2-sdk-11

在Visual Studio 2017中,.NET(C#)通过Oracle.ManagedDataAccess来连接Oracle数据库

C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜索栏中输入oracle查找,选择名为Oracle.ManagedDataAccess的安装. 2.引入Oracle.ManagedDataAccess.Client空间 3.数据库的连接字符串: User ID:用户名 Password:用户密码 Data Source:请看下面的截图 OK,到此在

本地主机不安装oracle客户端--访问远程oracle数据库

在不安装oracle客户端情况下用sqlplus连接数据库: 1.去官网下载 http://www.oracle.com/technetwork/topics/winx64soft-089540.html instantclient-basic-windows.x64-11.2.0.4.0.zipinstantclient-sqlplus-windows.x64-11.2.0.4.0.zipinstantclient-sdk-windows.x64-11.2.0.4.0.zip 2.将上述三个文

安装unxiodbc软件,连接oracle数据库

 安装unixodbc--以下操作在root用户下操作 安装过程和报错处理我是参考及引用网络上的资源,也结合了自己的实际安装环境 一.安装unixodbc工具 1.下载unixodbc压缩包(unixODBC-2.3.4.tar.gz),用ssh工具将其上传linux服务器.(下载地址:http://www.unixodbc.org/) 2.输入以下命令,进行安装: #tar   -zxvf   unixODBC-2.3.4.tar.gz--解压 #cd  unixODBC-2.3.4--进入解

oracle 安装及用plSql连接本地数据库

1.首先安装本地oracle,这里我用的是XE10g的,具体安装就不演示了,一路傻瓜无脑装,用户名密码习惯设为root/root: 2.安装plsql,不习惯英文的可以紧接着装个中午插件,不做赘述: 3.连接本地数据库,,用户名:root ;口令(即密码):root ;数据库(本地):XE ;连接为:SYSDBA :点击确定,你会发现神奇的连上了;,

Oracle客户端无法连接服务端解决方法及步骤

客户端无法连接服务端数据库,原因有网络,配置,文件访问权限,数据库服务是否已启动 等问题导致,一般排查的步骤如下:1.检查操作系统级别网络是否通畅 ping 192.168.10.1 2.检查数据库层网络是否通畅 tnsping myserverdb 3.检查监听状态是否正常 lsnrctl status listener 4.如果第二步不通,检查服务端监听配置是否正确 监听文件配置一般如下 # 监听名称 LISTENER= (DISCRIPTION = (ADDRESS=(PROTOCOL =

PL/SQL(x64)借助Oracle Instant Client连接Oracle配置教程

PL/SQL在Windows x64位操作系统下安装配置稍显复杂,为了方便Oracle库友使用这个便利的工具,先提供PL/SQL借助Oracle Instant Client(该文件比Oracle Client文件小很多,可为用户节省安装时间)连接数据库配置教程一份,有需要的盆友请拿走. 1.  下载Oracle Instanct Client(Oracle即时客户端) 登录Oracle官方网站,下载Oralce即时客户端.你能够看到不同系统的客户端,根据自己的需要选择对应的版本,下载完毕后,解

【Robotframework连接oracle】robot连接oracle数据库

1.下载databaselibrary 2.安装一个oracle的支持库:cx_Oracle windows下可以下载.exe来安装,这个库的下载地址是:https://pypi.python.org/pypi/cx_Oraclehttps://pypi.python.org/pypi/cx_Oracle 下载的库的位数要和Python位数一致,我这里下载的64位的,(cx_Oracle-5.1.2-py2.7.egg-info),cx_Oracle版本是11g,下载完成后直接安装 3.dll