C#应用程序开发免安装Oracle户端的问题ppt课件.ppt

上传人:牧羊曲112 文档编号:1375483 上传时间:2022-11-16 格式:PPT 页数:14 大小:1.14MB
返回 下载 相关 举报
C#应用程序开发免安装Oracle户端的问题ppt课件.ppt_第1页
第1页 / 共14页
C#应用程序开发免安装Oracle户端的问题ppt课件.ppt_第2页
第2页 / 共14页
C#应用程序开发免安装Oracle户端的问题ppt课件.ppt_第3页
第3页 / 共14页
C#应用程序开发免安装Oracle户端的问题ppt课件.ppt_第4页
第4页 / 共14页
C#应用程序开发免安装Oracle户端的问题ppt课件.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《C#应用程序开发免安装Oracle户端的问题ppt课件.ppt》由会员分享,可在线阅读,更多相关《C#应用程序开发免安装Oracle户端的问题ppt课件.ppt(14页珍藏版)》请在三一办公上搜索。

1、C#应用程序开发(CS) 免安装Oracle户端的问题,当前,随着数字化和网络化的发展,应用开发程序能够简洁部署已成为重要的应用环节。由于信息化的发展,我公司先后实施了电极箔生产管理系统,电子铝箔生产管理系统,高纯铝生产管理系统,每个生产管理系统都存在着ORACLE客户端的使用安装。维护工作量相当大。如何解决C/S架构下不安装ORACLE客户端是一个非常重要的问题,在开发生产管理系统项目中使用.Net链接Oracle数据库,有两个驱动:一个是Microsoft Corporation公司.Net产品自带的,一个是Oracle公司开发的ODP.Net的驱动。Microsoft Corporati

2、on公司.Net产品自带的驱动,必须用TNS方式连接数据库必须用TNS方式连接数据库,而不能用这种:Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.34)(PORT = 1521)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORC);User ID=admin;Password=admin;,一 、项目研发背景,开发Oracle的.Net程序,标准流程是先安装Oracle客户端,然后使用.Net自带驱动或者ODP.Net。其实只要按照这个流程来

3、做,基本上不会有错误,要错也只是TNS错而已。由于Oracle客户端实在是无比庞大,尽管后来可以只安装Oracle客户端运行时,仍然很大。 在此方案中,我们希望能做到免安装,伴随着我们开发的主程序拷贝过去就能用。经过多次测试,Oracle客户端运行时的关键在于OCI,也就是说,不管用什么语言写的程序,只要能找到运行时的oci.dll,基本上就能链接Oracle数据库了。,综合比较:Microsoft Corporation公司.Net产品自带的驱动和Oracle公司开发的ODP.Net的驱动,二、项目技术方案,1、Oracle数据库连接,采用ORACLE ODP.NEToci.dll: 主要是

4、Client.OracleCommand事件。ociw32.dll:主要是oracle客户端及网络组件。orannzsbb11.dll、oraocci11.dll、oraociei11.dll:Oracle.DataAccess.Client.OracleException异常事务处理Oracle.DataAccess.dll:数据库连接处理。OraOps11w.dll: 主要是Client.OracleCommand事件。实际上,这是使用ODP.Net经常遇到的问题,在ODP.Net中,Oracle.DataAccess.dll=OraOps11w.dll=oci.dll,前面两者的版本必须

5、100%匹配。应用程序必须找到上述文件的路径。,2、客户端监听处理。oracle.key、classes12.jar、ojdbc14.jarclasses12.jar、ojdbc14.jar必须在注册表里注册文件路径或环境变量。3.配置d:oracleinstantclient的tnsnames.ora文件,在当前NETWORKADMIN下存放文件tnsnames.ora只需要修改其中的服务器地址、服务名称和端口。 tnsnames.ora文件内容orcl =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.

6、16.4.181)(PORT = 1521)(CONNECT_DATA =(SERVICE_NAME = orcl),4、注册表加入下面键值 变量名: 1) ORACLE_HOME 变量值:D:Program Filesinstantclient_10_2 2) 变量名:TNS_ADMIN 变量值:D:Program Filesinstantclient_10_2 3) 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 4) 修改Path变量,在后面添加 D:Program Filesinstantclient_10_2,三、网络实施的项目技

7、术方案,在做过的项目中,经常有连接Oracle数据库的情况,但是由于种种原因,无法在部署程序的电脑上安装Oracle客户端。这里提供了一种简单的,无需安装和多余配置的方法。适用于.NET C#。 网上有一些解决办法,通常是要下载对应版本的Oracle instant client, 但是这个客户端是个压缩包,解压之后,还要进行一些配置。对于客户来说,有时候配置这些也是比较繁琐的,因此这里把相关的内容总结一下,得出一个较为合理的方法。,本方法优点:1、程序内集成Oracle客户端,无需用户自行进行配置本方法缺点:2、增加程序包的体积(Oracle instant client本身有几十兆大小)下

8、面说一下如何实现。0、首先,从Oracle网站上下载对应版本的Oracle instant client包,网址在这里http:/ 1、下载来的.zip压缩包,解压后应该有如下文件:(测试是11G版本,10可能略有不同)classes12.jaroci.dllocijdbc11.dllociw32.dllojdbc14.jarOracle.DataAccess.dllorannzsbb11.dlloraocci11.dlloraociei11.dllOraOps11.dll其中Oraociei11.dll体积最大,可能封装了一些资源文件。,2、在你的工程根目录下新建一个”Oracle”的文件夹

9、(其实名字和位置随便定),然后将上述文件拷贝到里边,并在Visual Studio中添加这个文件夹及文件们。保证你的解决方案里能看到它们。3、在Visual Studio IDE的“解决方案资源管理器”里,打开Oracle文件夹,选中里边所有的文件,在“属性”“复制到输出目录”里设置“如果较新则复制”,这样在编译或者发布程序的时候,Oracle文件夹会随着发布到exe所在的地方,部署时候就不会出现找不到Oracle库的情况。4、按照网上的大多数教程,这个时候就需要在widnows环境变量里边添加东西了。其实这一步不是必须的,因为考虑到不同的客户环境,有可能用户没有权限在他的计算机上操作这些,那

10、么我们把设置Oracle环境变量放到程序里来做。那么在你初始化程序之后,使用Oracle之前,需要添加如下代码: string oraclePath = System.Windows.Forms.Application.StartupPath + oracle;Environment.SetEnvironmentVariable(PATH, oraclePath,EnvironmentVariableTarget.Process);Environment.SetEnvironmentVariable(NLS_LANG, SIMPLIFIED CHINESE_CHINA.ZHS16GBK, En

11、vironmentVariableTarget.Process);,解释一下上面的代码:string oraclePath = System.Windows.Forms.Application.StartupPath + oracle;这一句取得了oracle 驱动文件夹的位置,也就是放oci.dll的地方。Environment.SetEnvironmentVariable(PATH, oraclePath,EnvironmentVariableTarget.Process);这一句设置环境变量“PATH”,写入oracle驱动所在的文件夹,第三个参数表示这个PATH只在当前进程起作用,不会

12、修改电脑本身。注意:如果你用到某些外部程序,还有其他PATH变量要设置,在这里加入就行了。具体方法参见.net相关文档。Environment.SetEnvironmentVariable(NLS_LANG, SIMPLIFIED CHINESE_CHINA.ZHS16GBK, EnvironmentVariableTarget.Process);这一句,设置Oracle在通讯过程中使用的语言和字符集。我的项目用的是上面的字符集,对应到你的项目,可用SQL语句去oracle数据库中查询。这个语言和字符集一定要和服务器一致,否则可能会出现乱码甚至无法连接。可能会用到如下SQL语句:/select

13、 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.conf

14、ig中修改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、好了

15、,运行你的程序试试看吧。最后,如果你还是习惯写tns名称来访问oracle数据库,那么还要做以下工作。(注意,以下未测试)a.在程序的Oracle文件夹下增加tnsnames.ora,并将tns名称的配置写到里边去。b.在程序设置环境变量的地方,加入Environment.SetEnvironmentVariable(TNS_ADMIN, oraclePath,EnvironmentVariableTarget.Process);c.连接字符串里应该可以使用tns名称了,Oracle ODP.Net 的手工分发 1 、版本:Version 对于ODP.Net版本问题,若使用ODP.Net10.

16、2.0版本,则客户端(Oracle Client)也要相应的使用10.2的版本,否则会链接不成功;其实也是很简单,就是保证Bin目录下的dll版本就基本差不多了;同时ODP.Net在此目录增加两个非常重要的dll(OraOps10.dll,OraOps10w.dll);2、语言集:(Nls/Data) 基于Oracle10G Client的手工分发一文的基础之上增加一个lx20367.nlb这个文件就可;3、注册表:(ODP.Net注册表键值) 指出ODP.Net dll的位置(即Bin下的两个特殊文件,见1),而不是Oracle.DataAccess.dll的位置: 对于ODP.Net 10

17、.2来说注册表如下: Windows Registry Editor Version 5.00 HKEY_LOCAL_MACHINESOFTWAREORACLEODP.NET1.102.2.20 DllPath=C:oracleproduct10.2.0client_1bin HKEY_LOCAL_MACHINESOFTWAREORACLEODP.NET2.102.2.20 DllPath=C:oracleproduct10.2.0client_1bin,四、C#应用程序部署 综合上述,首先要确定Oracle数据库连接,重点是:应用程序必须找到上述文件的路径。其次解决客户端监听处理,重点是:在注册表里注册文件路径或环境变量。通过以上两个技术实施方案,可以解决C# Oracle免客户端开发问题。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号