我已经构建了一个小型WinForms应用程序,并且正在使用ODP.NET托管驱动程序连接到Oracle数据库。我已按照本文档中的说明使用application.config文件设置连接:
基于我在多个地方发现的文档,我给人的印象是application.config文件相对于数据库别名解析具有最高优先级。例如:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId6
但是我遇到的是,如果TNS_ADMIN环境变量存在,则它的优先级高于.NET配置文件中“ dataSources”部分中的数据源别名。我知道TNS_ADMIN设置是用于配置连接的一个选项,但是我尚未在我的application.config文件中配置此设置。
此主题的最后2篇帖子似乎是指我遇到的同一问题。 https://community.oracle.com/message/10610812#10610812
最后一篇文章声称该问题是由于在machine.config设置中定义了TNS_ADMIN引起的,并且此问题将覆盖其他所有内容。但这与此处的文档矛盾:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId4
我还尝试搜索我的所有4个machine.config文件,但找不到对TNS_ADMIN的任何引用。因此,在我的情况下,无疑要对TNS_ADMIN位置进行优先级排序,但无法找到对TNS_ADMIN变量的引用。
我在上面第二个链接中发布的官方优先顺序是否正确?那么machine.config呢?我应该在哪里寻找对TNS_ADMIN变量的引用?
答案 0 :(得分:1)
这似乎是一个困难的话题。从Microsoft Sysinternals下载Process Monitor,看看哪些文件以什么顺序加载。
我认为优先顺序取决于发布版本,而且文档肯定是错误的。
在 .NET开发人员指南的Oracle数据提供程序中,没有提到TNS_ADMIN
环境变量,但是,当您使用Process Monitor进行检查时,您会发现它已被占用(据我所记得甚至具有最高优先级)
当您安装ODP.NET托管驱动程序的最新版本12.2时,尽管文档说未使用注册表,但您仍可以在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET.Managed\4.122.1.0\TNS_ADMIN
处的注册表中登录。
所以我的建议是:将所有可能的值设置到同一文件夹,甚至在%ORACLE_HOME%\network\admin
上创建一个指向tnsnames.ora
的位置的符号链接。