I have written a C# application that connects to an Oracle 10g database. Using Oracle Data Access Component 11.2 "ODAC", it works perfectly on my machine.
And now I want to deploy the application and install it in another "clean machine" that has the .NET Framework only! And I don't want to install the whole ODAC component to the user!
How could I do that? I have tried to include all the necessary DLL files to my bin folder, like:
But still it didn't work. What should I do to solve this problem?
You don't need to install any Oracle client separately. I installed the following in the same directory as the .exe:
Oracle.DataAccess.dll oci.dll OraOps11w.dll oraociei11.dll msvcr71.dll
Make sure your project references the same Oracle.DataAccess.dll that you are delivering. This worked on a fresh pc which had never had oracle clients installed.
I avoided using TNSNAMES.ora by specifiying a connection string like this
connectionstring = Data Source="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))" + "(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = )))"
If you are using TNSNAMES.ora just cut and paste the connection details into a single line string.
see What is the minimum client footprint required to connect C# to an Oracle database?
for more information.
For information on how to obtain the above dlls, see this tutorial: http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/
Since this question was posted, the Oracle Managed Client is now available (provided by Oracle). I have been using it with no problems. Does not require hunting for DLL's or special configuration. Just add the package, modify configuration file, and you're set. NuGet Link and an article by Oracle about it..
Since this client is written entirely in .NET Managed code, it's architecture independent and there is no need for external DLL's, installing an Oracle Client, or anything like that.
You can install it in VS using Package Manager.
Install-Package Oracle.ManagedDataAccess
I've taken to putting this in the machine.config file (though it'll also work in web.config or app.config). I've found that this helps avoid conflicts with other drivers that may be installed:
<configuration> <system.data> <DbProviderFactories> <remove invariant="Oracle.DataAccess.Client" /> <remove invariant="Oracle.ManagedDataAccess.Client" /> <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/> </DbProviderFactories> </system.data> <configuration>
Then for your connection string:
<add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With