我只是一名普通的.Net开发人员,常用SqlServer,偶尔用其它数据库,属于能连上然后select/execute就行的那种。但就是我这么小的愿望,在面对Oracle时都很难实现。
虽然04年就开始用Oracle开发项目,但每次遇到问题总是胡乱弄一下,能用就行。这次又遇到问题,更离谱的是:同一个版本的NewLife.XCode,同一台机器,同一个ODP.Net版本,上个月写的程序工作好好的,怎么折腾都能用,刚刚新写的一个,怎么写都不行!于是,决心彻底的解决这个问题,共耗时三天三夜(熬夜到凌晨一两点)。
我们知道,用.Net链接Oracle数据库,有两个驱动,一个是.Net自带的,一个是Oracle开发的ODP.Net(下载地址)(要注册,后面提供一个我们团队的下载地址)。而.Net自带那个,MS早就不支持不更新了,于是一般开发都会用ODP.Net。并且,.Net自带的驱动,必须用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;
否则报错:
连接选项“Data Source”的长度无效,最大长度为 128
开发支持Oracle的.Net程序,标准流程是先安装Oracle客户端,然后使用.Net自带驱动或者ODP.Net。其实只要按照这个流程来做,基本上不会有错误,要错也只是TNS错而已。而最令人忍受不了的就是,Oracle客户端实在是无比庞大,尽管后来可以只安装Oracle客户端运行时,仍然很大。于是,就有高手制作精简版客户端,这个网上很多,效果也非常不错。
当然啦,Oracle官方也没闲着,推出了InstantClient,不到30M的msi安装程序。总算是摆脱了那个巨大的客户端。
但是,人的欲求是无止境的!有了更小的运行时,为了方便,我们还希望能做到免安装,伴随着我们开发的主程序拷贝过去就能用。经过多方求证,Oracle客户端运行时的关键在于OCI,也就是说,不管用什么语言写的程序,只要能找到运行时的oci.dll,基本上就能链接Oracle数据库了。
通过反编译ODP.Net里面的Oracle.DataAccess.dll发现,它会先找注册表,然后是配置文件,从中找一些设置,第一个就是DllPath,我估计这个就是OCI的路径。于是备份了InstantClient安装后的文件,然后把它卸载了,并确保注册表没有残留。释放备份的文件,在项目配置文件里面指定路径:
实际上是增加一个段:
<configSections>
<section name="oracle.dataaccess.client" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
然后再设置DllPath:
<oracle.dataaccess.client>
<settings>
<add name="DllPath" value="D:\Oracle\OCI" />
</settings>
</oracle.dataaccess.client>
让测试代码跑起来,一切正常!这说明,只要能找到oci.dll所在目录,程序就可以正常工作。当然,如果把这个目录的文件直接放到软件目录中,也是可以使用的。
到这里,习惯的想,只要把那些安装后的文件拷贝走,就可以使用了。但打包的时候才发现,InstantClient的安装文件虽然不到30M,但是安装之后足足139M(下图实际上是最新的驱动2.112.2.0,网上的InstantClient是2.112.1.0,两者文件基本一样):
图中可以看到,罪魁祸首是oraociei11.dll这个,它就占了126M。上网搜索各种Oracle客户端精简方案,必要的几个文件:
oci.dll、orannzsbb11.dll、oraocci11.dll、oraociei11.dll,它是必不可少的呀……
当然,还有两个:Oracle.DataAccess.dll、OraOps11w.dll,有些安装包会把OraOps11w.dll跟OCI放在一起,也是可以的。
伤不起呀!这几个文件就127M了,最高压缩,也有30M,并且解压还特别慢!(这个压缩包后面提供下载)
难道除了这个就没办法更小了吗?不是的!朋友告诉我一个很小的运行时oracle9i310(网上有扣积分下载,后面提供本地下载),才13M,不过需要安装。
但是这个运行时比较难缠,如果用最新的Oracle.DataAccess.dll去连接,会报版本不匹配!
(这里插一段关于版本不兼容的说明)
The provider is not compatible with the version of Oracle client
提供程序与此版本的 Oracle 客户机不兼容
这个可是开发.Net For Oracle程序中最常见的错误了。
实际上,这是使用ODP.Net经常遇到的问题,在ODP.Net中,Oracle.DataAccess.dll=>OraOps11w.dll=>oci.dll,前面两者的版本必须100%匹配(OraOps11w.dll里面通过硬编码写死了的)(也许这就是Oracle官方把OraOps11w.dll跟Oracle.DataAccess.dll放在一起的原因)。后面两者的版本似乎要求不高,是C++之间的引用。
而.Net的Oracle驱动,版本要求就非常低了,只要能找到oci.dll,基本上就能很好工作,它不会去检查版本什么的。如果找不到oci.dll呢,就会报这个错误:
System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。
当然,光有OCI目录(在环境变量Path中设置)不行,还得设置环境变量ORACLE_HOME为OCI目录,否则报错(因为oci.dll要用别的dll):
OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用。
言归正传!
最新的ODP.Net驱动无法使用oracle9i310运行时,那么试试MS的。设置环境变量ORACLE_HOME为oracle9i310目录,在环境变量Path中添加其下的bin目录(oci.dll在里面)。测试正常!这表明,9i运行时支持绿色发布。
下一步,就应该是开始精简这个oracle9i310了。
不到13M的安装包,安装后只有35M,远远比最新的ODP.Net驱动要小,压缩后不到9M。
删除一些不必要的东西后,剩下28M,压缩得到6.5M。这应该算是最小的Oracle客户端运行时了。
综合比较:
|
.Net自带Oracle驱动
|
ODP.Net驱动
|
连接字符串TNS写法 |
支持 |
支持 |
连接字符串非TNS写法 |
不支持 |
支持 |
是否支持Oracle9运行时 |
支持 |
不支持 |
是否支持Oracle11运行时 |
支持 |
支持 |
OCI目录设置方式 |
环境变量Path中设置 |
环境变量Path中设置 或 配置文件设置DllPath 或 注册表设置DllPath |
其它环境变量 |
需要设置ORACLE_HOME |
无 |
运行时安装包大小 |
9i运行时安装包13M |
11g运行时安装包30M 最新ODP.Net共52M |
绿色精简后大小 |
9i运行时6.5M |
11g运行时30M |
据说的差别 |
性能底下,功能特性少 |
性能最高,功能特性多 |
|
|
|
下载地址:
Oracle9i客户端运行时精简版 6.5M
Oracle11g客户端运行时精简版 30M
Oracle9i客户端运行时原版 13M
Oracle11g客户端运行时原版 52M
(下载地址随时可能变更,以最新群公告为准!)
FTP承受不了,增加网盘共享:
9i精简版:http://www.kuaipan.cn/file/id_2378544298602218.html
11g精简版:http://www.kuaipan.cn/file/id_2378544298602215.html
9i原版:http://www.kuaipan.cn/file/id_2378544298602216.html
11g原版:http://www.kuaipan.cn/file/id_2378544298602217.html
(FTP严重影响了服务器网络,现在已经关闭)
后续:
Devart dotConnect for Oracle
在OneCool和小胖2010的推荐下,分析Devart。
1,采用名称混淆,分析有一定难度
2,采用Lic授权,很脆弱
3,发现调用OCI.DLL,发现处理Home等环境变量,看来还是离不开oci.dll
综评,跟ODP.Net比,没有优势,并且还是收费的(也有免费版)
DataDirect
在园友wizardwu的一篇博客中发现了这个家伙。
1,产品说明非常吸引人,唯一一个100%托管代码数据提供者,不需要Oracle OCI客户端库。对,这就是我们梦寐以求的!
2,最新版本是3.5,需要申请试用。上午10点,发动群友,采用各种国内外邮箱、IP、VPN申请,均无法收到邮件。下午3点收到,开始下载。
3,上午从CSDN找到一个2.1的版本(For .Net 1.0),未混淆,采用Lic授权,支持OEM,自写的对称加密算法,内置没有任何处理的密码,很脆弱
4,从2.1版本中很清楚的看到数据封包解包,网络发送和接收的过程。没有见到任何跟OCI和HOME有关的东西。可以肯定,这是纯托管代码且不需要OCI的。
5,下午分析3.5(For .Net 2.0/4.0),名称混淆,也是Lic授权。看到类的布局,还有各个命名空间,不需要分析下去了。
综评,没错,这就是我们所需要的极品,强烈推荐!!!没找到价格,似乎必须跟他们联系。时间不多,没有做运行测试,我想网上有很多报告的!
其中2.1版,关于Oracle、SqlServer、Sybase、DB2的封包,非常具有参考价值!
2.1版下载:http://www.kuaipan.cn/file/id_2378544298602742.html
3.5版下载:http://www.kuaipan.cn/file/id_2378544298602758.html
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分享到:
相关推荐
直 接 连接oracle数据库,不需要oracle客户端,.net版本
总之,通过使用ODAC组件,Delphi开发者可以在不安装Oracle客户端的情况下,方便地与Oracle数据库进行交互,大大简化了开发流程和系统维护成本。ODAC不仅提供了基本的数据库操作功能,还支持存储过程、游标、批处理等...
最新版的dotConnect for Oracle 5.60专业版,包括Linq to Oracle.
Devart dotConnect for Oracle Professional是一款高效且功能丰富的Oracle数据库连接组件,专为.NET开发者设计。这个版本号v9.5.399代表着该产品的一个更新迭代,旨在提供更好的性能、稳定性和新特性。 首先,我们...
Devart dotConnect for ...总的来说,Devart dotConnect for Oracle Professional是.NET和Delphi开发者连接Oracle数据库的理想选择,它以高性能、易用性和丰富的功能,助力开发人员构建高效、稳定的企业级应用程序。
11. **持续更新与支持**:Devart 公司定期发布更新和补丁,以修复已知问题,增加新功能,确保与最新版本的 Oracle 数据库和 .NET 框架兼容。 总结来说,dotConnect for Oracle 9.5 Professional 是一个强大的工具,...
5. **Oracle Transaction Manager for .NET (Oramts)**:Oramts是Oracle的.NET事务管理器,它提供了两阶段提交和其他高级事务管理功能,确保在分布式系统中的数据一致性。 6. **ASP.NET Support**:`asp.net4`表明...
亲测,注意只能32位下运行,不需要安装oracle客户端,直接解压,using Devart.Data.Oracle; using Devart.Data; 支持 US7ASCII下中文正常显示。
dotConnect For Oracle是Devart公司出品的一个.net平台访问Oracle数据库的一个驱动。它的专业版本是一个收费版本提供了许多别的驱动所没有的功能与特性,如对Linq To Oracle,Ado.Net Entity Framework For Oracle...
1.安装,2.拷贝Crack中的文件覆盖安装目录中的文件即可
它绕过了传统的Oracle客户端库,如ODP.NET,减少了中间层的交互,从而提升了数据传输速度和整体应用性能。这种直连技术可以显著降低服务器负载,尤其是在处理大量数据或进行复杂查询时。 其次,OraDirect .NET支持...
Devart_dbForge_Studio_for_Oracle_Professional_4.0.304_x86_Downloadly.ir.rar 是一个包含Devart公司的dbForge Studio for Oracle Professional 4.0.304 x86版本的压缩包文件。dbForge Studio是针对Oracle数据库的...
适用于MySQL,SQL Server和Oracle数据库的devart dbForge Studio工具是一款用于编辑数据,生成综合报告并对其进行分析,备份,比较数据库,故障排除和数据库问题故障排除,深入探索的全面综合工具 数据库和这些...
本文件来源于网络,Devart dbForge Studio for Oracle 4.1.48 正式企业版,先安装原装,安装完后不要勾选马上启动程序,然后将目录下的破解复制到安装目录覆盖原文件,完成,欢迎试用,请支持正版!
这个驱动允许开发者使用一个JDBC驱动连接到不同版本和类型的Oracle数据库,简化了开发和维护的工作。 在实际操作中,为了确保系统的稳定性和安全性,你应该定期检查Oracle驱动的更新,并根据需要进行升级。同时,...
最近做项目,要跟对方系统的库进行读写,结果发现对方采用的是oracle的us7ascii编码,我们系统默认采用的是ZHS16GBK,导致我们客户端读取和写入对方库的数据都是乱码,搜索网上,发现需要采用独立的oracle驱动去处理...
DevArt是一家知名的软件开发公司,尤其在数据库连接和数据访问组件方面有着丰富的经验。dbExpress是DevArt开发的一个数据库访问框架,它为多种数据库提供统一的API,使得开发者可以更轻松地在不同的数据库系统间迁移...
Devart的MyDirect .NET v4.85是一款专门针对.NET开发者设计的数据库连接组件,它提供了高效、高性能的数据访问接口,使得开发人员能够轻松地与各种数据库进行交互。MyDirect这个名字代表了它直接和数据库内核进行...
Devart dbForge Studio for Oracle v4.0.29试用版是一款专为Oracle数据库设计的强大开发工具,它集成了多种功能,旨在提高数据库管理、开发和优化的效率。这款软件提供了一个直观的用户界面,使得数据库管理员和开发...
总的来说,Devart SecureBridge v9.3.1 for Delphi 10.4为Delphi开发者提供了一套全面的工具集,使他们能够安全、高效地与远程服务器进行交互,极大地扩展了Delphi应用程序的安全网络通信能力。通过深入理解和熟练...