配置的应用程序为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):
using Oracle.DataAccess.Client; using Oracle.DataAccess.Types;
测试代码:
string connecitonString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.21.3.34)(PORT=1521))(CONNECT_DATA=(SID=db001)));User Id=username;Password=password;"; DataTable datatable = new DataTable(); using (OracleConnection connection = new OracleConnection(connecitonString))
{
using (OracleCommand command = new OracleCommand())
{
connection.Open(); command.Connection = connection;
command.CommandText = "select * from table_001 where rownum<10";
command.CommandType = CommandType.Text; OracleDataAdapter dataAdapter = new OracleDataAdapter(command); dataAdapter.Fill(datatable);
}
}
折腾了,n久才把程序调通。
注意:发布时需要包含bin下的所有外部oracle组件.dll相关文件。