问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

devart dotconnect for oracle 编码问题

发布网友 发布时间:2022-04-11 19:00

我来回答

2个回答

懂视网 时间:2022-04-11 23:21

http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html 我只是一名普通的.Net开发人员,常用SqlServer,偶尔用其它数据库,属于能连上然后select/execute就行的那种。但就是我这么小的愿望,在面对Oracle时都很难实现。 虽然04年就开始用Oracle开发

http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html


我只是一名普通的.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安装后的文件,然后把它卸载了,并确保注册表没有残留。释放备份的文件,在项目配置文件里面指定路径:

实际上是增加一个段:

 
 

然后再设置DllPath:


 
 
 

让测试代码跑起来,一切正常!这说明,只要能找到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

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!

热心网友 时间:2022-04-11 20:29

“数据源的数据库。”的providerName =“devart。相同的数据。”/>追问问题是是我在控制台程序完全无问题

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
刀塔传奇攻略 刀塔传奇圣堂刺客属性怎么样[图]介绍_刀塔传奇攻略 刀塔... 刀塔传奇圣堂刺客技能加点解析介绍_刀塔传奇圣堂刺客技能加点解析是什么... 天谕手游圣堂雷罡和地罡哪个好 走哪个流派更吃香 谁说圣堂不能当DPS 雷罡输出圣堂养成教学 如何成为一名合格的雷罡圣堂 输出技巧分享 烟花三月下扬州是哪首古诗 巴中市巴州区大学中专招生委员会办公室单位简介 四川巴中市巴州区的高考报名号前几位是多少? 巴中市高考总分多少 求stand and deliver devart oracle能直接连接64位oracle吗 怎样用Delphi编程实现客户端免安装Oracle? 在weblogic11g中如何创建oracle10.2数据源,选择哪一个驱动程序.. oracle新件索引估计表空间大小 如何查看ORACLE 表空间上的所有对象?表 视图.索引 等占的大小 查询出oracle数据库所有的索引(存储过程,job,squeuse等) 数量 如何查看Oracle表以及索引的存储空间 Arccatalog中通过Arcsde导入oracle后,我用SQL Developer打开后字段错误和丢失怎么办 啊? 怎么将oracle数据导入到arcgis oracle如何导入arcsde表空间 怎么在ArcSDE中使用Oracle分区表2索引分区 / 网络技术编程 Pro*C/C++连ORACLE数据的问题 执行到EXEC SQL connect :BUREAUDB/BUREAUDB@orcl;这句就不往下执行了。 Oracle EM 无法启动 oracle版本问题 oracle11.2.0是什么版本 批处理 oracle 语句块;为什么不执行? oracle 多个 update语句怎么写 如何修改ArcSDE的端口号信息 arcsde 服务启动不了相关文档? ArcSDE连接不上 如何设置arcsde 10 for linux启动 重装系统后不重装oracle oracle 我需要将数据库里面的数据导出 然后重装oracle 但是提示无监听 为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录 sql语句 not in在表里有空值时就查询不到 oracle中not in 传入空值怎么处理 pl/sql中的not in与in的sql语句问题 SQL server中,如果出现in和NULL在一起时应该怎么写语句呀 oracle的sql中not in如何优化 ORACLE的SQL语句,错在哪了,怎么老是未选定行 oracle 中not in 和 not exists 哪个效率高? ORACLE 查询in和not in 有没有碰到过用IN查询数据有时会不准确,特别是关联字段有为空的时候,而用exists就不会 oracle 怎么修改parallel oracle 是否可以同时进行多个表分析 ArcSDE for Oracle怎么恢复误删除的要素类和要素 / 蓝讯 怎样在ArcSDE中操作Oracle分区表2 安装arcsde for oracle 10g R2,最后一步出错 win8.1下安装oracle11g安装时弹出下面的 求大神赐教 win8.1安装oracle 11g时点击set.up进入dos都就自动退了