How to set proper path to TNSNAMES file in C# application?

Marshall picture Marshall · May 16, 2012 · Viewed 19.3k times · Source

I have a program in C# that use ODP.NET dlls:

oci.dll, ociw32.dll, Oracle.DataAccess.dll,
orannzsbb11.dll, oraocci11.dll, oraociicus11.dll,
OraOps11w.dll. 

I've got 2 computers. First with whole ODAC package installed, and second without that package. But I have all required dlls in my exe directory, so ODAC is not a problem I think.

The difference between these computers is the path to the TNSNAMES file.

First: C:\app\OraHome_1\Network\admin\
Second: C:\Oracle\product\11.2.0\client_1\network\admin

On the first computer, the program works fine. But on the second one with the same connection string, I get the error:

cannot open connection (ORA-12154)

Using SQL Plus I can connect on both computers. How can I show my program the proper path to the tnsnames.ora file?

Answer

SQLMason picture SQLMason · May 16, 2012

You can set the TNS_ADMIN environment variable programmatically. See this page for a step by step. That is if you wanted to change to a specific TNS_NAMES.ORA file. The Oracle Client must still be installed on the client machine.

From ConnectionStrings - without using TNS:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;


EDIT: Added 3rd option

Please see this question which could aid you in finding the current location of the client's TNS_NAMES.ORA file - which you could open and modify if you wish (add your own connection if it doesn't exist)