“我终于认输了,我终于开口求助了,我能想到的办法都用上了,但我似乎无能为力。”
我正在与:VS2010 C# Oracle 12c ODP.Net Managed121012
我继承了一个同时使用托管和非托管dataaccess dll的应用程序。它一直工作,直到我卸载oracle。然后我重新安装了64位机器的11g客户端。马上我注意到只安装了framework 2的dataaccess dll,然后我将client_1文件夹中的所有oci和ora dll复制到我的应用程序的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>
在此之后,我现在可以看到一些旧的数据源,但我不能连接到我的数据库,因为我得到了一个“连接请求超时”。当我手动创建一个新的连接,我可以连接与非托管提供程序的罚款,但得到一个连接请求超时错误。
我真的是在我的绳子的尽头,真的很感激新鲜的眼睛之前,我使用的绳子。
先谢谢你了。
5条答案
按热度按时间fivyi3re1#
在切换到托管驱动程序后,我遇到了同样的问题。甚至使用本机和托管驱动程序编写了一个测试应用程序。结论是托管驱动程序需要比本机驱动程序更多的时间来打开新连接。对我们有效的解决方案是使用连接字符串设置一个大的连接超时。
0lvr5msh2#
以防万一有人在mono 4.8上运行时遇到这个问题。似乎有一个同步错误,导致Oracle客户端在使用所有连接后无法扩展连接池。请参阅此bug
iyfjxgzm3#
在Visual Studio中使用即时窗口进行测试时,我们看到了同样的错误。我们真的困惑了一段时间,直到我们正常运行代码(不使用即时窗口),问题就消失了。因此,在Visual Studio中,Oracle ManagedDataAccess和即时窗口之间存在某种交互,可能会导致此错误。
我知道这不是你们大多数人的答案,但我希望它对某些人有用。
jvlzgdj94#
请检查Oracle输出参数。因为我的应用程序也面临着同样的情况。
我们把oracleoutput参数改成了Refcursor,也许这个解决方案会有用。
a2mppw5e5#
返回Oracle.ManagedDataAccess.Core.dll版本3.21.1
命名空间与使用Oracle.ManagedDataAccess.Client时相同