我正在尝试使用Function Apps(. NET 6)将集成移动到云,连接到一个非常旧的本地Oracle 8i数据库。我花了几天时间尝试不同的Nuget包和不同的连接字符串,但我不能连接。我试过Oracle. ManagedDataAccess. Core、System. Data. OracleClient(这会引发无法加载OCI DLL错误,无论如何都不推荐使用)和Nuget存储中的其他一些。
我可以看到连接通过防火墙(函数应用程序有VNET集成通过路由),但使用Oracle. ManagedDataAccess. Core和连接字符串"数据源=(描述=(地址=(协议= TCP)(主机= myHost)(端口= myPort))(HTTP_DATA =(SID = mySIDId)); User Id = myUsername; Password = myPassword"我在OracleConnection. Open()上得到以下内容
- 索引在数组边界之外**
- 在OracleInternal。连接池。PoolManager
3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd, OracleConnection connRefForCriteria, Boolean bMaxSemObtained, Boolean bIgnoreIdleSem, Boolean& bIdleSemObtainedWhileCreatingPR, String instanceName, List
1 switchFailedInstNames)。连接池。OraclePoolManager。NewPR新闻(Int32 reqCount,Boolean bForPoolPopulation,ConnectionString csWithDiffOrNewPwd,OracleConnection connRefForCriteria,Boolean bMaxSemObtained,Boolean bIgnoreIdleSem,Boolean & bIdleSemObtainedWhileCreatingPR,String instanceName,List1 switchFailedInstNames) at OracleInternal.ConnectionPool.PoolManager
3.Get(ConnectionString csWithDiffOrNewPwd,Boolean bGetForApp,OracleConnection connRefForCriteria,String affinityInstanceName,Boolean bForceMatch)at OracleInternal.连接池。OraclePoolManager。在OracleInternal获取(ConnectionString csWithNewPassword,Boolean bGetForApp,OracleConnection connRefForCriteria,String affinityInstanceName,Boolean bForceMatch)。连接池。OracleConnectionDispenser `3.Get(ConnectionString cs,PM conPM,ConnectionString pmCS,SecureString securedPassword,SecureString securedProxyPassword,OracleConnection connRefForCriteria)at Oracle. ManagedDataAccess。客户。OracleConnection。打开()*
很明显,这是PoolManager.ManagerNewPR()方法中的一个问题(我似乎无法通过添加新的"函数"断点来调试它),但我不知道问题是什么,是否是Oracle的版本连接到本地,以及Oracle. ManagedDataAccess. Core是否支持这一点。如前所述,我已经尝试了这个nuget包的最旧版本和其他一些基于Oracle的包(官方的,非官方的,不推荐的),似乎没有什么工作。
任何想法非常赞赏。
1条答案
按热度按时间dgtucam11#
看看Client / Server Interoperability Support Matrix for Different Oracle Versions,看看需要哪个Oracle客户端。
看起来,您需要安装10.2.0 Oracle客户端(如果8i表示版本8.1.7)
请注意,ODP.NET提供程序(
Oracle.DataAccess.dll
)的版本必须与Oracle客户端的版本完全匹配。它可以是“Oracle Data Provider for .NET 1.x 10.2.0.2.20”或“Oracle Data Provider for .NET 2.0 10.2.0.2.20”这些都是基于.NET版本1和2,我不认为他们与.NET版本6工作。当然,它们仅适用于32位(x86)。
但是,您可以使用旧的Microsoft ODBC或OleDB提供程序,而不是使用Oracle ODP.NET,它们当然可以与旧的客户端一起工作。
如何连接到Oracle 11数据库净
祝你好运!