如何在C#应用程序中设置TNSNAMES文件的正确路径?

时间:2012-05-16 12:28:04

标签: c# oracle tnsnames

这是我的问题: 我在C#中使用ODP.NET dll的程序:oci.dll,ociw32.dll,Oracle.DataAccess.dll,orannzsbb11.dll,oraocci11.dll,oraociicus11.dll,OraOps11w.dll。

我有2台电脑。首先安装完整的ODAC包,然后安装第二个包。但我在exe目录中都需要dll,所以ODAC不是问题(我认为)。 这些计算机之间的区别是TNSNAMES文件的路径。 第一:C:\ app \ OraHome_1 \ Network \ admin \ 第二:C:\ Oracle \ product \ 11.2.0 \ client_1 \ network \ admin

并在第一个CPU程序工作正常。但是在具有相同连接字符串的第二个上,无法打开连接(ORA-12154)。使用SQL Plus,我可以在两台计算机上连接。

那么,我怎样才能向我的节目展示TNSNAMES的正确路径?

3 个答案:

答案 0 :(得分:12)

您可以通过编程方式设置TNS_ADMIN环境变量。请参阅此页面了解step by step.如果您想要更改为特定的TNS_NAMES.ORA文件,请参阅此页面。仍必须在客户端计算机上安装Oracle客户端。

来自ConnectionStrings - 不使用TNS:

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

<小时/> 编辑:添加了第3个选项

see this question,它可以帮助您找到客户端TNS_NAMES.ORA文件的当前位置 - 如果您愿意,可以打开并修改(如果不存在则添加您自己的连接)< / p>

答案 1 :(得分:3)

您无需关心TNSNames文件的路径:图书馆本身会自动发现它...一旦安装完毕。这是关键点:在项目中分发dll是不够的。您需要在需要使用它的机器上安装ODP.Net:实际上,安装只需创建一些注册表项,其中一个指向正确的oracle目录(其中库可以在需要时找到tnsnames)。

Morover,正如有人指出的那样,你根本不需要tnsnams文件。您可以在连接字符串中编写所需的所有内容。 这是我在我的环境中使用的一个:

Data Source= (DESCRIPTION =
      (ENABLE = BROKEN)
      (ADDRESS_LIST =
      (LOAD_BALANCE = ON)
      (FAILOVER = ON)
      (ADDRESS = (PROTOCOL = TCP)(Host =por10srv-a)(Port = 1521))
      )
      (CONNECT_DATA =
      (SERVICE_NAME = por10.gruppo.autostrade.it)
      (FAILOVER_MODE =
      (TYPE = SELECT)
      (METHOD = BASIC)
      (RETRIES = 10)
      (DELAY = 3)
      )
      )
      );User ID=npa_collaudo;Password=npa_collaudo;

答案 2 :(得分:2)

您不需要安装ODP.NET(或Oracle客户端),因为您似乎拥有本地可分发的内联oracle客户端所需的DLL。在您的情况下,可以让TNSNAMES.ORA文件与您的可执行文件位于同一文件夹中,您的专用“内联oracle客户端”将从那里获取它。否则,应用程序本地的oracle客户端将尝试从计算机上安装的任何客户端中获取它。

相关问题