欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

    我只是一名普通的.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安裝后的文件,然后把它卸載了,并確保注冊表沒有殘留。釋放備份的文件,在項目配置文件里面指定路徑:

image

實際上是增加一個段:

  <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,兩者文件基本一樣):

image

圖中可以看到,罪魁禍首是oraociei11.dll這個,它就占了126M。上網搜索各種Oracle客戶端精簡方案,必要的幾個文件:

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

當然,還有兩個:Oracle.DataAccess.dll、OraOps11w.dll,有些安裝包會把OraOps11w.dll跟OCI放在一起,也是可以的。

image

傷不起呀!這幾個文件就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了。

image

不到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運行時安裝包13M11g運行時安裝包30M
最新ODP.Net共52M
綠色精簡后大小9i運行時6.5M11g運行時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一篇博客中發現了這個家伙。

image

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

我不相信神話,我只相信汗水!我不相信命運,我只相信雙手!


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