日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ODP.net与Oracle连接

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ODP.net与Oracle连接 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ODP.net是Oracle提供的數(shù)據(jù)庫(kù)訪問(wèn)類庫(kù),其功能和效率上都有所保證,它還有一個(gè)非常方便特性:在客戶端上,可以不用安裝Oracle客戶端,直接拷貝即可使用。

以下內(nèi)容轉(zhuǎn)載自:http://blog.ywxyn.com/index.php/archives/326

由于微軟在.net framework4中會(huì)將System.Data.OracleClient.dll deprecated,而且就訪問(wèn)效率和速度而言,System.Data.OracleClient.dll與Oracle.DataAccess.dll相比,微軟的確實(shí)沒有oracle提供的類庫(kù)有優(yōu)勢(shì),所以我放棄了使用多年的System.Data.OracleClient.dll,取而代之的是odp.net。然而odp.net的優(yōu)點(diǎn)不止這些,還包括:

1、不在安裝客戶端也能訪問(wèn)服務(wù)器上的oracle(假設(shè)Application Server與DB Server 分開)

2、不需要配置TnsNames.Ora文件

當(dāng)然,我選擇odp.net的最主要的原因還是性能。這篇文章列舉了兩者之間的對(duì)比。Technical Comparison: ODP.NET Versus Microsoft OracleClient

下面我將介紹如何在一個(gè)在新的項(xiàng)目中使用odp.net。環(huán)境配置:A機(jī)器,運(yùn)行C#程序,沒有安裝oracle數(shù)據(jù)庫(kù)或者客戶端等任何oracle的產(chǎn)品;B機(jī)器就運(yùn)行著一個(gè)oracle9i數(shù)據(jù)庫(kù),再?zèng)]安裝過(guò)其它oracle產(chǎn)品

首先要下載odp.net文件,可以在這個(gè)頁(yè)面下載Oracle Data Access Components (ODAC) Downloads,我下載的是Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio這個(gè)版本。

下載完成之后不用安裝,將Oracle.DataAccess.dll文件從 ODTwithODAC1110720.zip\stage\Components\oracle.ntoledb.odp_net_2\11.1.0.7.10\1\DataFiles\filegroup4.jar文件中解壓出來(lái)就行,然后復(fù)制到項(xiàng)目中,再添加引用Oracle.DataAccess.dll。
編寫如下代碼:

using Oracle.DataAccess.Client;
...
string connstring =
? "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))" +
? "(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;";//這個(gè)也可以放到Web.Config中。
using (OracleConnection conn = new OracleConnection(connstring))
{
? conn.Open();
? string sql = "select * from users";
? using (OracleCommand comm = new OracleCommand(sql, conn))
? {
??? using (OracleDataReader rdr = comm.ExecuteReader())
??? {
????? while (rdr.Read())
????? {
??????? Console.WriteLine(rdr.GetString(0));
????? }
??? }
? }
}

代碼編寫好以后,還要從下載的壓縮包中取出幾個(gè)dll文件。
1、oci.dll (在jar文件里面叫’oci.dll.dbl’,拿出來(lái)之后去掉.dbl in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup2.jar)
2、oraociicus11.dll (in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.ic\11.1.0.7.0\1\DataFiles\filegroup3.jar)

3、OraOps11w.dll (in ODTwithODAC1110720.zip\stage\Components\Oracle.ntoledb.odp_net_2\11.1.0.7.10\1\DataFiles\filegroup3.jar)

4、oraons.dll (in ODTwithODAC1110720.zip\stage\Components\oracle.ons.ic\11.1.0.7.10\1\DataFiles\filegroup1.jar ?? )?


下面這三個(gè)有人說(shuō)需要,有人說(shuō)不需要,反正也不差這三個(gè),繼續(xù)吧:
5、orannzsbb11.dll (in ODTwithODAC1110720.zip\stage\Components\oracle.ldap.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup1.jar)
6、oraocci11.dll (in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup3.jar)
7、ociw32.dll (在jar文件里面叫’ociw32.dll.dbl’,拿出來(lái)之后去掉.dbl in ODTwithODAC1110720.zip\stage\Components\ oracle.rdbms.rsf.ic\11.1.0.7.0\1\DataFiles\filegroup2.jar)
最后把這個(gè)DLL復(fù)制到項(xiàng)目中,CS的要與exe一個(gè)文件夾,B/S的有專門的bin目錄。

當(dāng)然,使用一項(xiàng)新技術(shù),必然會(huì)遇到一些錯(cuò)誤:以下是我遇到的:

1、運(yùn)行的時(shí)候遇到這個(gè)異常提示’The provider is not compatible with the version of Oracle client’,不要緊張,檢查一下上面所用到的dll是否齊全就OK。

2、“找不到請(qǐng)求的 .Net Framework 數(shù)據(jù)提供程序。可能沒有安裝。”這個(gè)錯(cuò)誤提示是因?yàn)樵趍achine.config中找不到Oracle.DataAccess.dll,將下面的代碼放到

<DbProviderFactories></DbProviderFactories&gt;

之間就OK。

<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /&gt;

注:如果下載的不是ODTwithODAC1110720,有可能dll的位置不像是上面提到的那樣,需要自己去挨個(gè)找了:(

以上為基本的使用方法,還有幾點(diǎn)要注意的地方(部分內(nèi)容轉(zhuǎn)載自 http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html):

1:在上面列出的DLL中,其中Oracle.DataAccess.dll和OraOps11w.dll才是ODP.net對(duì)應(yīng)的文件,其余的DLL均為OracleInstantClient對(duì)應(yīng)的文件,ODP.net和InstantClient的版本必須一致,否則會(huì)發(fā)生錯(cuò)誤,只要能保證版本正確,可以視需求另外下載OracleInstantClient(因?yàn)镮nstantClient分幾個(gè)版本,BASIC,BASIC_LITE等),再將這幾個(gè)DLL文件替換

2:各版本的ODTwithODAC包,其DLL位置都不相同,在新版本的包中,上面列出的DLL中,有些DLL已經(jīng)去掉了(比如orannzsbb11.dll),而且Oracle.DataAccess.dll也根據(jù).net的版本分為多個(gè)(以O(shè)DTwithODAC112030為例,其中包含2.x和4.0兩個(gè)版本,分別對(duì)應(yīng)vs2005與2010,開發(fā)時(shí)需要取用對(duì)應(yīng)的包),使用時(shí)注意所取的DLL文件是否正確

3:對(duì)于連接字符串,上文中使用的是:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))(CONNECT_DATA=(SID=orcl)))
這個(gè)是比較典型的tnsname寫法,除了這種寫法外,ODP.net還支持將數(shù)據(jù)源簡(jiǎn)單地寫為:[//]host[:port][/service_name]

例如,上文中的例子即可寫成Data Souce=192.168.0.100:1527/orcl

此外,在這里也同樣可以引用tnsnames.ora中配置好的連接(在本機(jī)裝有Oracle的前提下),有兩個(gè)方法:直接在程序中設(shè)置環(huán)境變量TNS_ADMIN,將其指向network\admin,或設(shè)置環(huán)境變量ORACLE_HOME,程序會(huì)自動(dòng)去 %ORACLE_HOME%\network\admin下查找tnsnames.ora

4:進(jìn)行數(shù)據(jù)庫(kù)連接和查詢修改之前,有一些環(huán)境變量的設(shè)置可能會(huì)影響到程序的運(yùn)行結(jié)果,同時(shí),如果本機(jī)以前已經(jīng)安裝過(guò)Oracle,它的一些設(shè)置也會(huì)影響到程序的運(yùn)行,所以,在程序打開連接之前,可以視情況適當(dāng)選用下面的一些環(huán)境變量,來(lái)保證程序運(yùn)行結(jié)果的正確(注意這部分是從英文資料中轉(zhuǎn)載過(guò)來(lái)的,有部分變量值對(duì)于中文環(huán)境來(lái)說(shuō)可能會(huì)出現(xiàn)問(wèn)題,請(qǐng)酌情修改)

Environment.SetEnvironmentVariable("ORA_TZFILE", null);
Environment.SetEnvironmentVariable("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8");
Environment.SetEnvironmentVariable("NLS_DATE_FORMAT", "DD-MON-RR");
Environment.SetEnvironmentVariable("NLS_TIME_FORMAT", "HH.MI.SSXFF AM");
Environment.SetEnvironmentVariable("NLS_TIMESTAMP_FORMAT", "DD-MON-RR HH.MI.SSXFF AM");
Environment.SetEnvironmentVariable("NLS_TIMESTAMP_TZ_FORMAT", "DD-MON-RR HH.MI.SSXFF AM TZR");

轉(zhuǎn)載于:https://www.cnblogs.com/lijianhua/p/7425996.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的ODP.net与Oracle连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。