狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Oracle免客戶端For .Net(增加分析Devart和DataDirect)

admin
2018年7月18日 18:3 本文熱度 6212

    我只是一名普通的.Net開(kāi)發(fā)人員,常用SqlServer,偶爾用其它數(shù)據(jù)庫(kù),屬于能連上然后select/execute就行的那種。但就是我這么小的愿望,在面對(duì)Oracle時(shí)都很難實(shí)現(xiàn)。

    雖然04年就開(kāi)始用Oracle開(kāi)發(fā)項(xiàng)目,但每次遇到問(wèn)題總是胡亂弄一下,能用就行。這次又遇到問(wèn)題,更離譜的是:同一個(gè)版本的NewLife.XCode,同一臺(tái)機(jī)器,同一個(gè)ODP.Net版本,上個(gè)月寫(xiě)的程序工作好好的,怎么折騰都能用,剛剛新寫(xiě)的一個(gè),怎么寫(xiě)都不行!于是,決心徹底的解決這個(gè)問(wèn)題,共耗時(shí)三天三夜(熬夜到凌晨一兩點(diǎn))。

    我們知道,用.Net鏈接Oracle數(shù)據(jù)庫(kù),有兩個(gè)驅(qū)動(dòng),一個(gè)是.Net自帶的,一個(gè)是Oracle開(kāi)發(fā)的ODP.Net(下載地址)(要注冊(cè),后面提供一個(gè)我們團(tuán)隊(duì)的下載地址)。而.Net自帶那個(gè),MS早就不支持不更新了,于是一般開(kāi)發(fā)都會(huì)用ODP.Net。并且,.Net自帶的驅(qū)動(dòng),必須用TNS方式連接數(shù)據(jù)庫(kù),而不能用這種:

    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;

    否則報(bào)錯(cuò):

    連接選項(xiàng)“Data Source”的長(zhǎng)度無(wú)效,最大長(zhǎng)度為 128

    開(kāi)發(fā)支持Oracle的.Net程序,標(biāo)準(zhǔn)流程是先安裝Oracle客戶端,然后使用.Net自帶驅(qū)動(dòng)或者ODP.Net。其實(shí)只要按照這個(gè)流程來(lái)做,基本上不會(huì)有錯(cuò)誤,要錯(cuò)也只是TNS錯(cuò)而已。而最令人忍受不了的就是,Oracle客戶端實(shí)在是無(wú)比龐大,盡管后來(lái)可以只安裝Oracle客戶端運(yùn)行時(shí),仍然很大。于是,就有高手制作精簡(jiǎn)版客戶端,這個(gè)網(wǎng)上很多,效果也非常不錯(cuò)。

    當(dāng)然啦,Oracle官方也沒(méi)閑著,推出了InstantClient,不到30M的msi安裝程序。總算是擺脫了那個(gè)巨大的客戶端。

    但是,人的欲求是無(wú)止境的!有了更小的運(yùn)行時(shí),為了方便,我們還希望能做到免安裝,伴隨著我們開(kāi)發(fā)的主程序拷貝過(guò)去就能用。經(jīng)過(guò)多方求證,Oracle客戶端運(yùn)行時(shí)的關(guān)鍵在于OCI,也就是說(shuō),不管用什么語(yǔ)言寫(xiě)的程序,只要能找到運(yùn)行時(shí)的oci.dll,基本上就能鏈接Oracle數(shù)據(jù)庫(kù)了。

    通過(guò)反編譯ODP.Net里面的Oracle.DataAccess.dll發(fā)現(xiàn),它會(huì)先找注冊(cè)表,然后是配置文件,從中找一些設(shè)置,第一個(gè)就是DllPath,我估計(jì)這個(gè)就是OCI的路徑。于是備份了InstantClient安裝后的文件,然后把它卸載了,并確保注冊(cè)表沒(méi)有殘留。釋放備份的文件,在項(xiàng)目配置文件里面指定路徑:

image

實(shí)際上是增加一個(gè)段:

  <configSections>
    <section name="oracle.dataaccess.client" type="System.Data.Common.DbProviderConfigurationHandler, System.Data,  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  configSections>

然后再設(shè)置DllPath:

<oracle.dataaccess.client>
  <settings>
    <add name="DllPath" value="D:\Oracle\OCI" />
  settings>
oracle.dataaccess.client>

讓測(cè)試代碼跑起來(lái),一切正常!這說(shuō)明,只要能找到oci.dll所在目錄,程序就可以正常工作。當(dāng)然,如果把這個(gè)目錄的文件直接放到軟件目錄中,也是可以使用的。

到這里,習(xí)慣的想,只要把那些安裝后的文件拷貝走,就可以使用了。但打包的時(shí)候才發(fā)現(xiàn),InstantClient的安裝文件雖然不到30M,但是安裝之后足足139M(下圖實(shí)際上是最新的驅(qū)動(dòng)2.112.2.0,網(wǎng)上的InstantClient是2.112.1.0,兩者文件基本一樣):

image

圖中可以看到,罪魁禍?zhǔn)资莖raociei11.dll這個(gè),它就占了126M。上網(wǎng)搜索各種Oracle客戶端精簡(jiǎn)方案,必要的幾個(gè)文件:

oci.dll、orannzsbb11.dll、oraocci11.dll、oraociei11.dll,它是必不可少的呀……

當(dāng)然,還有兩個(gè):Oracle.DataAccess.dll、OraOps11w.dll,有些安裝包會(huì)把OraOps11w.dll跟OCI放在一起,也是可以的。

image

傷不起呀!這幾個(gè)文件就127M了,最高壓縮,也有30M,并且解壓還特別慢!(這個(gè)壓縮包后面提供下載)

難道除了這個(gè)就沒(méi)辦法更小了嗎?不是的!朋友告訴我一個(gè)很小的運(yùn)行時(shí)oracle9i310(網(wǎng)上有扣積分下載,后面提供本地下載),才13M,不過(guò)需要安裝。

但是這個(gè)運(yùn)行時(shí)比較難纏,如果用最新的Oracle.DataAccess.dll去連接,會(huì)報(bào)版本不匹配!

(這里插一段關(guān)于版本不兼容的說(shuō)明)

The provider is not compatible with the version of Oracle client

提供程序與此版本的 Oracle 客戶機(jī)不兼容

這個(gè)可是開(kāi)發(fā).Net For Oracle程序中最常見(jiàn)的錯(cuò)誤了。

實(shí)際上,這是使用ODP.Net經(jīng)常遇到的問(wèn)題,在ODP.Net中,Oracle.DataAccess.dll=>OraOps11w.dll=>oci.dll,前面兩者的版本必須100%匹配(OraOps11w.dll里面通過(guò)硬編碼寫(xiě)死了的)(也許這就是Oracle官方把OraOps11w.dll跟Oracle.DataAccess.dll放在一起的原因)。后面兩者的版本似乎要求不高,是C++之間的引用。

而.Net的Oracle驅(qū)動(dòng),版本要求就非常低了,只要能找到oci.dll,基本上就能很好工作,它不會(huì)去檢查版本什么的。如果找不到oci.dll呢,就會(huì)報(bào)這個(gè)錯(cuò)誤:

System.Data.OracleClient 需要 Oracle 客戶端軟件 8.1.7 或更高版本。

當(dāng)然,光有OCI目錄(在環(huán)境變量Path中設(shè)置)不行,還得設(shè)置環(huán)境變量ORACLE_HOME為OCI目錄,否則報(bào)錯(cuò)(因?yàn)閛ci.dll要用別的dll):

OCIEnvCreate 失敗,返回代碼為 -1,但錯(cuò)誤消息文本不可用。

言歸正傳!

最新的ODP.Net驅(qū)動(dòng)無(wú)法使用oracle9i310運(yùn)行時(shí),那么試試MS的。設(shè)置環(huán)境變量ORACLE_HOME為oracle9i310目錄,在環(huán)境變量Path中添加其下的bin目錄(oci.dll在里面)。測(cè)試正常!這表明,9i運(yùn)行時(shí)支持綠色發(fā)布。

下一步,就應(yīng)該是開(kāi)始精簡(jiǎn)這個(gè)oracle9i310了。

image

不到13M的安裝包,安裝后只有35M,遠(yuǎn)遠(yuǎn)比最新的ODP.Net驅(qū)動(dòng)要小,壓縮后不到9M。

刪除一些不必要的東西后,剩下28M,壓縮得到6.5M。這應(yīng)該算是最小的Oracle客戶端運(yùn)行時(shí)了。

綜合比較:

 

.Net自帶Oracle驅(qū)動(dòng)

ODP.Net驅(qū)動(dòng)

連接字符串TNS寫(xiě)法支持支持
連接字符串非TNS寫(xiě)法不支持支持
是否支持Oracle9運(yùn)行時(shí)支持不支持
是否支持Oracle11運(yùn)行時(shí)支持支持
OCI目錄設(shè)置方式環(huán)境變量Path中設(shè)置環(huán)境變量Path中設(shè)置

配置文件設(shè)置DllPath

注冊(cè)表設(shè)置DllPath
其它環(huán)境變量需要設(shè)置ORACLE_HOME無(wú)
運(yùn)行時(shí)安裝包大小9i運(yùn)行時(shí)安裝包13M11g運(yùn)行時(shí)安裝包30M
最新ODP.Net共52M
綠色精簡(jiǎn)后大小9i運(yùn)行時(shí)6.5M11g運(yùn)行時(shí)30M
據(jù)說(shuō)的差別性能底下,功能特性少性能最高,功能特性多
   

下載地址:

Oracle9i客戶端運(yùn)行時(shí)精簡(jiǎn)版 6.5M

Oracle11g客戶端運(yùn)行時(shí)精簡(jiǎn)版 30M

Oracle9i客戶端運(yùn)行時(shí)原版 13M

Oracle11g客戶端運(yùn)行時(shí)原版 52M

(下載地址隨時(shí)可能變更,以最新群公告為準(zhǔn)!)

FTP承受不了,增加網(wǎng)盤(pán)共享:

9i精簡(jiǎn)版:http://www.kuaipan.cn/file/id_2378544298602218.html

11g精簡(jiǎn)版: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嚴(yán)重影響了服務(wù)器網(wǎng)絡(luò),現(xiàn)在已經(jīng)關(guān)閉)

后續(xù):

Devart dotConnect for Oracle

OneCool小胖2010的推薦下,分析Devart

1,采用名稱混淆,分析有一定難度

2,采用Lic授權(quán),很脆弱

3,發(fā)現(xiàn)調(diào)用OCI.DLL,發(fā)現(xiàn)處理Home等環(huán)境變量,看來(lái)還是離不開(kāi)oci.dll

綜評(píng),跟ODP.Net比,沒(méi)有優(yōu)勢(shì),并且還是收費(fèi)的(也有免費(fèi)版)

DataDirect

在園友wizardwu一篇博客中發(fā)現(xiàn)了這個(gè)家伙。

image

1,產(chǎn)品說(shuō)明非常吸引人,唯一一個(gè)100%托管代碼數(shù)據(jù)提供者,不需要Oracle OCI客戶端庫(kù)。對(duì),這就是我們夢(mèng)寐以求的!

2,最新版本是3.5,需要申請(qǐng)?jiān)囉谩I衔?0點(diǎn),發(fā)動(dòng)群友,采用各種國(guó)內(nèi)外郵箱、IP、VPN申請(qǐng),均無(wú)法收到郵件。下午3點(diǎn)收到,開(kāi)始下載。

3,上午從CSDN找到一個(gè)2.1的版本(For .Net 1.0),未混淆,采用Lic授權(quán),支持OEM,自寫(xiě)的對(duì)稱加密算法,內(nèi)置沒(méi)有任何處理的密碼,很脆弱

4,從2.1版本中很清楚的看到數(shù)據(jù)封包解包,網(wǎng)絡(luò)發(fā)送和接收的過(guò)程。沒(méi)有見(jiàn)到任何跟OCI和HOME有關(guān)的東西。可以肯定,這是純托管代碼且不需要OCI的。

5,下午分析3.5(For .Net 2.0/4.0),名稱混淆,也是Lic授權(quán)。看到類的布局,還有各個(gè)命名空間,不需要分析下去了。

綜評(píng),沒(méi)錯(cuò),這就是我們所需要的極品,強(qiáng)烈推薦!!!沒(méi)找到價(jià)格,似乎必須跟他們聯(lián)系。時(shí)間不多,沒(méi)有做運(yùn)行測(cè)試,我想網(wǎng)上有很多報(bào)告的!

其中2.1版,關(guān)于Oracle、SqlServer、Sybase、DB2的封包,非常具有參考價(jià)值!

2.1版下載:http://www.kuaipan.cn/file/id_2378544298602742.html

3.5版下載:http://www.kuaipan.cn/file/id_2378544298602758.html

我不相信神話,我只相信汗水!我不相信命運(yùn),我只相信雙手!


該文章在 2018/7/18 18:03:04 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved