【问题标题】:ODP.Net Unmanged x64 causes unhandled exceptionODP.Net Unmanged x64 导致未处理的异常
【发布时间】:2019-07-15 10:48:23
【问题描述】:

在过去的几年里,我一直在使用 Oracle 的非托管驱动程序,即 32 位 Version=4.121.2.0 从 2015 年 10 月开始

现在我正在尝试升级以使用新的 Oracle 客户端并使用 64 位 Version=4.122.18.3 当我尝试连接到数据库时,我收到一个似乎无法在 Oracle 程序集中处理的错误,这使得很难确定问题所在。

然后我尝试在 x64 上使用以前的版本而不是 Version=4.122.1.0,我也得到了同样的错误。

任何如何使它工作或确定问题所在的想法将不胜感激。

错误:Object reference not set to an instance of an object

堆栈跟踪:

   at Oracle.DataAccess.Client.OracleException.get_Number()
   at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32 isRecoverable, OracleLogicalTransaction m_OracleLogicalTransaction)
   at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src, OracleLogicalTransaction m_oracleLogicalTransaction)
   at Oracle.DataAccess.Client.OracleConnectionOCP.Open(OracleConnection con)
   at Oracle.DataAccess.Client.OracleConnection.Open()
   at Oracle.DataAccess.EntityFramework.EFOracleProviderServices.GetDbProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.ExecuteSqlCommand(TransactionalBehavior transactionalBehavior, String sql, Object[] parameters)

我的项目中有以下配置 oracle 相关的配置设置:

<system.data>
    <DbProviderFactories>
      <add name="ODP.NET, Unmanaged Driver" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET, Unmanaged Driver" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.122.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
<entityFramework codeConfigurationType="ProFemOnline.Data.Old.ProFemDbModelOldConfiguration, ProFemOnline.Data.Old">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="Oracle.DataAccess.Client" type="Oracle.DataAccess.EntityFramework.EFOracleProviderServices, Oracle.DataAccess.EntityFramework, Version=6.122.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
  </entityFramework>

【问题讨论】:

  • 您是否也更新了 Oracle 客户端?
  • 您是否更改了编译/运行选项?如果您想使用 64 位 Oracle 驱动程序,您的应用程序必须在 64 位模式下运行
  • @WernfriedDomscheit 是的,更新到最新版本,但就像我说的,在旧版本上我得到了同样的错误。是的,它设置为以 64 位运行。如果您不设置,您甚至无法运行该应用程序。应用程序正在运行,但在尝试执行查询时发生错误。
  • 那么请向我们展示您获得异常的代码。从堆栈看来,当您尝试打开连接时出现异常。
  • “更新到最新版本”是什么意思。 Oracle 客户端的版本必须与Oracle.DataAccess.dll完全相同(!)版本相同

标签: .net oracle odp.net odac


【解决方案1】:

可能回复晚了,但我遇到了同样的问题

at Oracle.DataAccess.Client.OracleException.get_Number()

并由 :

修复

oraons.dll 从 oracle_home 复制到 oracle_home\bin 文件夹

例如 来自

"C:\oracle\odac\oraons.dll"

"C:\oracle\odac\bin\oraons.dll"

如果您同时安装了 oracle 客户端和 ODAC,则从 ODAC 主目录复制到 ODAC\bin 文件夹

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多