我终于承认失败并寻求帮助。我已经做了我能想到的一切来解决这个问题,但似乎我无法做到这一点。
我正在与: VS2010 C# Oracle 12c ODP.Net Managed121012
我继承了一个同时使用托管和非托管数据访问dll的应用。它一直在工作,直到我卸载oracle。然后我为64位机器重新安装了11g客户端。我立刻注意到安装了框架2只有dataaccess dll,但我仍然继续。然后我将所有oci和ora dll从client_1文件夹复制到我的应用程序的bin目录中,并将Oracle.DataAccess.dll复制到我的bin目录中。我还将Oracle.ManagedDataAccess.dll复制到此文件夹中。
只要我没有更改数据集上的任何内容,我的应用程序就会成功运行。我会很乐意继续这样做,除了我必须创建更多的数据集。当我尝试添加新数据集时,我的数据源连接向导下拉列表为空。然后我尝试重新创建连接,但只能看到.Net Framework DProviders。我看不到托管服务提供商。在某些时候,我也得到了这个错误“当前没有选择数据提供者”。
认为这是因为未安装托管服务提供商我卸载了11g客户端并安装了64位12c客户端并将所有相关文件复制到我的应用程序的bin中。我在app.config文件中添加了以下行:
<configSections>
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess" />
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.DataAccess.Client" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.DataAccess.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>
在此之后,我现在可以看到一些旧的数据源,但我无法连接到我的数据库,因为我收到“连接请求超时”。当我手动创建一个新连接时,我可以很好地与非托管提供程序连接,但得到一个连接请求超时错误。
我真的在绳子的尽头,在使用绳子之前真的很欣赏新鲜的眼睛。
提前致谢。
答案 0 :(得分:13)
切换到托管驱动程序后,我遇到了同样的问题。甚至使用本机和托管驱动程序编写了测试应用程序。结论是托管驱动程序需要比本机驱动程序更多的时间来打开新连接。对我们有用的解决方案是使用连接字符串设置大的连接超时。
<connectionStrings>
<add name="ConnectionString" connectionString="data source=xxxx;user id=xxxx;password=xxxx;persist security info=false;Connection Timeout=120;" />
</connectionStrings>
答案 1 :(得分:0)
以防万一在mono 4.8上运行时遇到此问题。似乎存在同步错误,导致Oracle客户端在使用所有连接后无法扩展连接池。见bug