配置的應用程序為x64的應用程序,以下解決方案是為了連接遠程服務器上的oracle 11g 的解決方案。
- 下載地址:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
- 下載版本:64-bit ODAC 11.2 Release 3 (11.2.0.2.1) Xcopy for Windows x64
- 下載后文件名:ODAC112021Xcopy_x64.zip
解壓后將看到如下目錄:
- asp.net -- asp.net 2.0需要的放在bin下的文件。
- asp.net4 -- asp.net 2.0需要的放在bin下的文件。
- instantclient_11_2 -- 公共的dll,需要的放在bin下的文件。
- odp.net4 -- winform2.0 需要的放在bin下的文件。
- odp.net20 -- winform2.0 需要的放在bin下的文件。
- oledb -- 公共的dll,需要的放在bin下的文件。
- oramts -- 在開發時,這個文件,我沒有用到
- xxx.bat(一些安裝的命令文件,這些文件不需要執行)
我在開發時,
- 1,)沒有直接執行instantclient_11_2下的任何文件,而是把該目錄下的所有文件及文件夾拷貝到bin目錄下(或者不拷貝應用程序的bin下,把該目錄拷貝到某一個路徑下,之后在環境path變量中追加該地址到path中)。
- 2,)之后包oledb下的所有.dll拷貝到 bin目錄下;
- 3,)odp.net4下載所有.dll拷貝到bin目錄下。
到此我們需要的所有oracle的dll已經拷貝完成,添加Oracle.DataAccess.dll引用到我們工程中;
在ODAC112021Xcopy_x64\odp.net4\odp.net\PublisherPolicy\4下包含兩個文件:
Policy.4.112.Oracle.DataAccess.config
Policy.4.112.Oracle.DataAccess.dll
我已經把他們拷貝到bin目錄了,之后打開Policy.4.112.Oracle.DataAccess.config,將:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.112.0.0-4.112.2.0" newVersion="4.112.2.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
添加到工程的config中。
在工程中引入命名空間(而不需要引入System.Data.OracleClient,而是Oracle.DataAccess.dll或者Oracle.ManagedDataAccess.dll):
1 using Oracle.DataAccess.Client; 2 using Oracle.DataAccess.Types;
測試代碼:
1 string connecitonString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.21.3.34)(PORT=1521))(CONNECT_DATA=(SID=db001)));User Id=username;Password=password;"; 2 3 DataTable datatable = new DataTable(); 4 5 using (OracleConnection connection = new OracleConnection(connecitonString)) 6 { 7 using (OracleCommand command = new OracleCommand()) 8 { 9 connection.Open(); 10 11 command.Connection = connection; 12 command.CommandText = "select * from table_001 where rownum<10"; 13 command.CommandType = CommandType.Text; 14 15 OracleDataAdapter dataAdapter = new OracleDataAdapter(command); 16 17 dataAdapter.Fill(datatable); 18 } 19 }
折騰了,n久才把程序調通。
注意:發布時需要包含bin下的所有外部oracle組件.dll相關文件。
