首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oracle.ManagedDataAccess异常连接到Oracle

使用Oracle.ManagedDataAccess异常连接到Oracle
EN

Stack Overflow用户
提问于 2018-01-22 17:36:51
回答 4查看 11.6K关注 0票数 3

我在我的Oracle.ManagedDataAccess (>.NET 4.0)项目中使用了12.2.1100版的>.NET Nuget软件包。在我的本地主机上,一切正常,但是在dev服务器上,我遇到了这个异常:

异常消息: ORA-12154: TNS:未能解析指定的连接标识符异常源:.NET的,托管驱动程序

现在我认为ManagedDataAcess包含了我所需要的一切。我是不是漏了什么东西?还有什么东西干扰了包裹吗?我还需要加点别的吗?

注意:在我的<oracle.manageddataaccess.client>中没有Web.config标记

代码:

代码语言:javascript
复制
<connectionStrings>
   <add name="XXX" connectionString="Data Source=XXX;User ID=XXX;Password=XXX" />
</connectionStrings>

编辑:

我已经确认了TNS_ADMIN变量是在控制面板中设置的,但这似乎没有起作用。

然后,我将tnsnames.ora文件添加到bin文件夹中,使其正常工作,但这不是一个长期的解决方案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-22 21:39:18

您的程序找不到tnsnames.ora (resp )。( sqlnet.ora)文件有几种指定位置的可能性。

  • 在.NET配置文件(web.configmachine.configapplication.config)中定义它
  • 设置环境变量TNS_ADMIN
  • tnsnames.orasqlnet.ora文件复制到应用程序.exe所在的目录。

.NET配置文件示例:

代码语言:javascript
复制
<oracle.manageddataaccess.client>
  <version number="4.122.*">
     <settings>
          <setting name="TNS_ADMIN" value="C:\oracle\network\admin"/>
     </settings>
  </version>
</oracle.manageddataaccess.client>

注意,与其他驱动程序/提供程序不同,ODP.NET托管驱动程序执行而不是从注册表读取TNS_ADMIN设置。

票数 6
EN

Stack Overflow用户

发布于 2018-01-22 17:44:39

您可能没有配置TNS,这就是这种连接字符串无法工作的原因。如果使用不同形式的连接字符串,则不需要配置TNS:

代码语言:javascript
复制
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MyIpOrServerName)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MySID)));User Id=MyUsername;Password=MyPassword;

用值替换所有My*占位符。

票数 5
EN

Stack Overflow用户

发布于 2018-06-13 23:35:19

我们在一个环境中看到了类似的问题,下面的问题解决了我们的问题;

当在web服务器上安装.NET的Oracle并根据安装期间选择的内容时,它会将条目写入machine.config文件(取决于框架版本,位于machine.config文件中)。似乎不同版本的ODP.NET安装程序对machine.config做了不同的事情(我们的一些服务器没有在machine.config中指定版本号,而其他服务器有为oracle托管客户端指定的特定版本号)。

根据安装的版本,它增加了如下几行:

..。

代码语言:javascript
复制
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

..。

代码语言:javascript
复制
<oracle.manageddataaccess.client>
  <version number="4.121.2.0">
    <settings>
      <setting name="TNS_ADMIN" value="C:\oracle\client\product\12.1.0\client_1\network\admin" />
    </settings>
  </version>
</oracle.manageddataaccess.client>

..。

条目包含引用ODP.NET oracle版本的特定版本号。我们正在使用托管客户端库( 12.2.1100 nuget包)的4.122.1.0版本构建应用程序,该版本与4.121.2.0不匹配。

通过从此标记中移除oracle托管客户端库版本,我们更改了上述条目:

代码语言:javascript
复制
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess" />

并为此标记指定版本号为“*”:

代码语言:javascript
复制
<oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="C:\oracle\client\product\12.1.0\client_1\network\admin" />
      </settings>
    </version>
  </oracle.manageddataaccess.client>

如果需要指定特定的版本号,那么确保代码使用相同的版本号进行编译。

如果存在这些条目,也可以从machine.config中删除它们,并根据您的配置在应用程序web.config中指定它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48387251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档