Analytics

2012年5月11日 星期五

[C#]如何 不安裝OracleClient連OracleDB(How not to install Oracle Client even OracleDB)


問題
如何 不安裝OracleClient連OracleDB



解決方法
一般連OracleServer方式是安裝OracleClient,並設定tnsname.ora進行連線,而OracleClient一般光是安裝檔就超過200MB以上,安裝後更是肥大,因此這邊說明如何不透過安裝OracleClient就可以讓程式連到OracleServer
準備步驟:
1.下載Instant Client,選擇對應作業系統,這邊示範用Instant Client for Microsoft Windows (32-bit)內版本為
Version 11.2.0.2.0
Instant Client Package - Basic: All files required to run OCI, OCCI, and JDBC-OCI applications
Download instantclient-basic-nt-11.2.0.2.0.zip (50,325,016 bytes)
,如果沒有oracle會員,請順便註冊一下吧!不需要費用的
2.下載以後,新建oraclebinary資料夾,將以下檔案copy到資料夾內
oci.dll
ociw32.dll
orannzsbb11.dll
oraocci11.dll
oraociei11.dll
OraOps11w.dll(這顆與OracleDataAccess.dll對應)
3.開發程式時,你應該會加入OracleDataAccess.dll參考(在OracleClient內)並將組件改為永遠複製,再將oraclebinary放置於輸出目錄底下
4.程式加入連線字串要改為tns連線方式如下:
<connectionStrings>
  <add name="Oracle.ConnectionString" connectionString="CONNECTION TIMEOUT=10;DATA SOURCE=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.35.120.211)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = modeldc2)));PASSWORD=pwd01;PERSIST SECURITY INFO=True;USER ID=user01"
providerName="Oracle.DataAccess.Client" />
</connectionStrings>

5.程式裡加入環境變數如下,以取得 OCI.dll的位置,如此一來就可以不安裝OracleClient連到OracleServer
string oraclePath = AppDomain.CurrentDomain.BaseDirectory+"\\oraclebinary";
Environment.SetEnvironmentVariable("PATH", oraclePath, EnvironmentVariableTarget.Process);
6.如果你除了要取資料以外,還需要以日期做查詢比對相關的轉型時,當遇到ORA-01843的錯誤,沒關係,因為由於在OracleServer會設定語系,而Client會因為作業系統不一樣,顯示不一樣的格式,例如繁體中文的年月日格式會是04-六月-2012,因此如果使用to_char格式為yyyy-mm-dd時,就會出現ORA-01843的問題,所以在連線到OracleServr時,你得先跟他說你的語系是甚麼,讓它可以正確執行to_char的function
1.先查出目前OracleServer的語系是甚麼
select * from nls_session_parameters;
擷取
2.請程式裡加入以下環境設定,如此一來就可以避免server格式問題了:
Environment.SetEnvironmentVariable("NLS_LANG", " TRADITIONAL CHINESE" , EnvironmentVariableTarget.Process);

<--------------------------------->
2017/04/27更新
若在new OracleConnection時發生錯誤:
The provider is not compatible with the version of Oracle client

1.下載ODAC(for 10 g使用ODAC 11.2 Release 6 (11.2.0.4.0)版本)
2.解壓縮後開cmd=>輸入[cd 解壓縮目錄]切換路徑=>輸入install.bat odp.net2 c:oracle odac
 .net framework 4以下用odp.net2, .net framework 4用odp.net4
3.程式引用安裝後的bin檔(C:\oracle\odp.net\bin\4 or C:\oracle\odp.net\bin\2)內的OracleDataAccess.dll
4.將C:\oracle\bin裡的OraOps11w.dll放置於原篇步驟2所建的oraclebinary資料夾內

沒有留言:

熱門文章