C#應(yīng)用程序開發(fā)免安裝Oracle戶端的問題課件_第1頁
C#應(yīng)用程序開發(fā)免安裝Oracle戶端的問題課件_第2頁
C#應(yīng)用程序開發(fā)免安裝Oracle戶端的問題課件_第3頁
C#應(yīng)用程序開發(fā)免安裝Oracle戶端的問題課件_第4頁
C#應(yīng)用程序開發(fā)免安裝Oracle戶端的問題課件_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C#應(yīng)用程序開發(fā)(CS)免安裝Oracle戶端的問題C#應(yīng)用程序開發(fā)(CS)

當(dāng)前,隨著數(shù)字化和網(wǎng)絡(luò)化的發(fā)展,應(yīng)用開發(fā)程序能夠簡潔部署已成為重要的應(yīng)用環(huán)節(jié)。由于信息化的發(fā)展,我公司先后實(shí)施了電極箔生產(chǎn)管理系統(tǒng),電子鋁箔生產(chǎn)管理系統(tǒng),高純鋁生產(chǎn)管理系統(tǒng),每個(gè)生產(chǎn)管理系統(tǒng)都存在著ORACLE客戶端的使用安裝。維護(hù)工作量相當(dāng)大。如何解決C/S架構(gòu)下不安裝ORACLE客戶端是一個(gè)非常重要的問題

在開發(fā)生產(chǎn)管理系統(tǒng)項(xiàng)目中使用.Net鏈接Oracle數(shù)據(jù)庫,有兩個(gè)驅(qū)動(dòng):一個(gè)是MicrosoftCorporation公司.Net產(chǎn)品自帶的,一個(gè)是Oracle公司開發(fā)的ODP.Net的驅(qū)動(dòng)。MicrosoftCorporation公司.Net產(chǎn)品自帶的驅(qū)動(dòng),必須用TNS方式連接數(shù)據(jù)庫必須用TNS方式連接數(shù)據(jù)庫,而不能用這種:DataSource=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=4)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORC)));UserID=admin;Password=admin;一、項(xiàng)目研發(fā)背景

當(dāng)前,隨著數(shù)字化和網(wǎng)絡(luò)化的發(fā)展,應(yīng)用開發(fā)程序能夠簡潔開發(fā)Oracle的.Net程序,標(biāo)準(zhǔn)流程是先安裝Oracle客戶端,然后使用.Net自帶驅(qū)動(dòng)或者ODP.Net。其實(shí)只要按照這個(gè)流程來做,基本上不會(huì)有錯(cuò)誤,要錯(cuò)也只是TNS錯(cuò)而已。由于Oracle客戶端實(shí)在是無比龐大,盡管后來可以只安裝Oracle客戶端運(yùn)行時(shí),仍然很大。在此方案中,我們希望能做到免安裝,伴隨著我們開發(fā)的主程序拷貝過去就能用。經(jīng)過多次測試,Oracle客戶端運(yùn)行時(shí)的關(guān)鍵在于OCI,也就是說,不管用什么語言寫的程序,只要能找到運(yùn)行時(shí)的oci.dll,基本上就能鏈接Oracle數(shù)據(jù)庫了。開發(fā)Oracle的.Net程序,標(biāo)準(zhǔn)流程是先安裝Or綜合比較:MicrosoftCorporation公司.Net產(chǎn)品自帶的驅(qū)動(dòng)和Oracle公司開發(fā)的ODP.Net的驅(qū)動(dòng)比較項(xiàng)目.Net自帶Oracle驅(qū)動(dòng)OracleODP.Net驅(qū)動(dòng)連接字符串TNS寫法支持支持連接字符串非TNS寫法不支持支持是否支持Oracle9運(yùn)行時(shí)支持不支持是否支持Oracle11運(yùn)行時(shí)支持支持OCI目錄設(shè)置方式環(huán)境變量Path中設(shè)置環(huán)境變量Path中設(shè)置其它環(huán)境變量需要設(shè)置ORACLE_HOME無運(yùn)行時(shí)安裝包大小9i運(yùn)行時(shí)安裝包13M11g運(yùn)行時(shí)安裝包30M

最新ODP.Net共52M綠色精簡后大小9i運(yùn)行時(shí)6.5M11g運(yùn)行時(shí)30M據(jù)說的差別性能底下,功能特性少性能最高,功能特性多二、項(xiàng)目技術(shù)方案

綜合比較:MicrosoftCorporation公司.N1、Oracle數(shù)據(jù)庫連接,采用ORACLEODP.NEToci.dll:主要是Client.OracleCommand事件。ociw32.dll:主要是oracle客戶端及網(wǎng)絡(luò)組件。orannzsbb11.dll、oraocci11.dll、oraociei11.dll:Oracle.DataAccess.Client.OracleException異常事務(wù)處理Oracle.DataAccess.dll:數(shù)據(jù)庫連接處理。OraOps11w.dll:主要是Client.OracleCommand事件。實(shí)際上,這是使用ODP.Net經(jīng)常遇到的問題,在ODP.Net中,Oracle.DataAccess.dll=>OraOps11w.dll=>oci.dll,前面兩者的版本必須100%匹配。應(yīng)用程序必須找到上述文件的路徑。1、Oracle數(shù)據(jù)庫連接,采用ORACLEODP.NET2、客戶端監(jiān)聽處理。oracle.key、classes12.jar、ojdbc14.jarclasses12.jar、ojdbc14.jar必須在注冊(cè)表里注冊(cè)文件路徑或環(huán)境變量。3.配置d:\oracleinstantclient的tnsnames.ora文件,在當(dāng)前\NETWORK\ADMIN下存放文件tnsnames.ora只需要修改其中的服務(wù)器地址、服務(wù)名稱和端口。tnsnames.ora文件內(nèi)容orcl=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=81)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))2、客戶端監(jiān)聽處理。4、注冊(cè)表加入下面鍵值變量名:1)ORACLE_HOME

變量值:D:\ProgramFiles\instantclient_10_22)變量名:TNS_ADMIN

變量值:D:\ProgramFiles\instantclient_10_23)變量名:NLS_LANG

變量值:SIMPLIFIEDCHINESE_CHINA.ZHS16GBK4)修改Path變量,在后面添加D:\ProgramFiles\instantclient_10_24、注冊(cè)表加入下面鍵值三、網(wǎng)絡(luò)實(shí)施的項(xiàng)目技術(shù)方案

在做過的項(xiàng)目中,經(jīng)常有連接Oracle數(shù)據(jù)庫的情況,但是由于種種原因,無法在部署程序的電腦上安裝Oracle客戶端。這里提供了一種簡單的,無需安裝和多余配置的方法。適用于.NETC#。

網(wǎng)上有一些解決辦法,通常是要下載對(duì)應(yīng)版本的Oracleinstantclient,但是這個(gè)客戶端是個(gè)壓縮包,解壓之后,還要進(jìn)行一些配置。

對(duì)于客戶來說,有時(shí)候配置這些也是比較繁瑣的,因此這里把相關(guān)的內(nèi)容總結(jié)一下,得出一個(gè)較為合理的方法。三、網(wǎng)絡(luò)實(shí)施的項(xiàng)目技術(shù)方案在做過的項(xiàng)目中,經(jīng)常有連接本方法優(yōu)點(diǎn):

1、程序內(nèi)集成Oracle客戶端,無需用戶自行進(jìn)行配置本方法缺點(diǎn):

2、增加程序包的體積(Oracleinstantclient本身有幾十兆大?。┫旅嬲f一下如何實(shí)現(xiàn)。0、首先,從Oracle網(wǎng)站上下載對(duì)應(yīng)版本的Oracleinstantclient包,網(wǎng)址在這里

/technetwork/database/features/instant-client/index-097480.html

由于是Windows程序,只需要下載Win32或64版本就行了。1、下載來的.zip壓縮包,解壓后應(yīng)該有如下文件:(測試是11G版本,10可能略有不同)

classes12.jar

oci.dll

ocijdbc11.dll

ociw32.dll

ojdbc14.jar

Oracle.DataAccess.dll

orannzsbb11.dll

oraocci11.dll

oraociei11.dll

OraOps11.dll

其中Oraociei11.dll體積最大,可能封裝了一些資源文件。本方法優(yōu)點(diǎn):

1、程序內(nèi)集成Oracle客戶端,無需用戶自行2、在你的工程根目錄下新建一個(gè)”O(jiān)racle”的文件夾(其實(shí)名字和位置隨便定),然后將上述文件拷貝到里邊,并在VisualStudio中添加這個(gè)文件夾及文件們。保證你的解決方案里能看到它們。3、在VisualStudioIDE的“解決方案資源管理器”里,打開Oracle文件夾,選中里邊所有的文件,在“屬性”“復(fù)制到輸出目錄”里設(shè)置“如果較新則復(fù)制”,這樣在編譯或者發(fā)布程序的時(shí)候,Oracle文件夾會(huì)隨著發(fā)布到exe所在的地方,部署時(shí)候就不會(huì)出現(xiàn)找不到Oracle庫的情況。4、按照網(wǎng)上的大多數(shù)教程,這個(gè)時(shí)候就需要在widnows環(huán)境變量里邊添加?xùn)|西了。其實(shí)這一步不是必須的,因?yàn)榭紤]到不同的客戶環(huán)境,有可能用戶沒有權(quán)限在他的計(jì)算機(jī)上操作這些,那么我們把設(shè)置Oracle環(huán)境變量放到程序里來做。那么在你初始化程序之后,使用Oracle之前,需要添加如下代碼:stringoraclePath=System.Windows.Forms.Application.StartupPath+@"\oracle";

Environment.SetEnvironmentVariable("PATH",oraclePath,EnvironmentVariableTarget.Process);

Environment.SetEnvironmentVariable("NLS_LANG","SIMPLIFIEDCHINESE_CHINA.ZHS16GBK",EnvironmentVariableTarget.Process);2、在你的工程根目錄下新建一個(gè)”O(jiān)racle”的文件夾(其實(shí)解釋一下上面的代碼:

stringoraclePath=System.Windows.Forms.Application.StartupPath+@"\oracle";

這一句取得了oracle驅(qū)動(dòng)文件夾的位置,也就是放oci.dll的地方。Environment.SetEnvironmentVariable("PATH",oraclePath,EnvironmentVariableTarget.Process);

這一句設(shè)置環(huán)境變量“PATH”,寫入oracle驅(qū)動(dòng)所在的文件夾,第三個(gè)參數(shù)表示這個(gè)PATH只在當(dāng)前進(jìn)程起作用,不會(huì)修改電腦本身。

注意:如果你用到某些外部程序,還有其他PATH變量要設(shè)置,在這里加入就行了。具體方法參見.net相關(guān)文檔。Environment.SetEnvironmentVariable("NLS_LANG","SIMPLIFIEDCHINESE_CHINA.ZHS16GBK",EnvironmentVariableTarget.Process);

這一句,設(shè)置Oracle在通訊過程中使用的語言和字符集。我的項(xiàng)目用的是上面的字符集,對(duì)應(yīng)到你的項(xiàng)目,可用SQL語句去oracle數(shù)據(jù)庫中查詢。這個(gè)語言和字符集一定要和服務(wù)器一致,否則可能會(huì)出現(xiàn)亂碼甚至無法連接。可能會(huì)用到如下SQL語句:

//selectuserenv('language')fromdual;查詢服務(wù)端字符集,用來設(shè)置上面的參數(shù)。

//select*fromnls_database_parameters;//服務(wù)器字符集

//select*fromnls_instance_parameters;//ora文件定義字符集

//select*fromnls_session_parameters;//會(huì)話字符集解釋一下上面的代碼:

stringoraclePath=5、理論上,經(jīng)過上面的設(shè)置,你的程序就可以使用內(nèi)置到exe目錄下的Oracle驅(qū)動(dòng)了,這里要注意的還有就是連接數(shù)據(jù)庫的方式,上面的修改并不能保證你可以使用tns名來連接,因此連接字符串要做如下修改:在app.config中修改connectionString為

PersistSecurityInfo=True;UserID=數(shù)據(jù)庫用戶名;Password=數(shù)據(jù)庫密碼;Unicode=True;DataSource=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服務(wù)器IP地址)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=服務(wù)器上的數(shù)據(jù)庫實(shí)例名)));

這個(gè)主要是把“DataSource”這部分直接用tcp/ip字符串方式替換了(通常DataSource是寫tns名稱的)6、好了,運(yùn)行你的程序試試看吧。最后,如果你還是習(xí)慣寫tns名稱來訪問oracle數(shù)據(jù)庫,那么還要做以下工作。

(注意,以下未測試)a.在程序的Oracle文件夾下增加tnsnames.ora,并將tns名稱的配置寫到里邊去。b.在程序設(shè)置環(huán)境變量的地方,加入

Environment.SetEnvironmentVariable("TNS_ADMIN",oraclePath,EnvironmentVariableTarget.Process);c.連接字符串里應(yīng)該可以使用tns名稱了5、理論上,經(jīng)過上面的設(shè)置,你的程序就可以使用內(nèi)置到exe目OracleODP.Net的手工分發(fā)1、版本:Version

對(duì)于ODP.Net版本問題,若使用ODP.Net10.2.0版本,則客戶端(OracleClient)也要相應(yīng)的使用10.2的版本,否則會(huì)鏈接不成功;其實(shí)也是很簡單,就是保證Bin目錄下的dll版本就基本差不多了;同時(shí)ODP.Net在此目錄增加兩個(gè)非常重要的dll(OraOps10.dll,OraOps10w.dll);2、語言集:(Nls/Data)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論