【问题标题】:Application Exception When Using ODP.NET To Access An Oracle 12c Database使用 ODP.NET 访问 Oracle 12c 数据库时的应用程序异常
【发布时间】:2018-01-27 01:16:02
【问题描述】:

我在运行我的数据库应用程序时遇到以下错误异常:

''Oracle.DataAccess.Client.OracleConnection' 的类型初始化程序引发了异常。' ConfigurationErrorsException:无法识别的配置部分 oracle.dataaccess.client。

多年来,我一直在使用相同的技术来处理 Oracle 集合用户定义类型 (UDT),但在升级到 Oracle 12c 后,我在尝试打开 Oracle 连接时收到上述消息。

相关信息:

1) Visual Studio 2017

2) Oracle 12c 第 2 版(这是我的开发系统上唯一的 Oracle 软件)

3) 开发 CPU:AMD Phenom

4) Windows 10 Pro(64 位)全新安装

5) 语言:VB.NET

6) Oracle.DataAccess(4.122.1.0 - 64 位)我的开发 CPU 上只有这个 .dll 的一个副本。 (我已确认 GAC 中没有副本) 这是一个非托管的 dll;我很想使用托管版本,但 Oracle 没有在托管版本中包含我需要处理 UDT 的接口。

7) 如果 app.config 文件不存在,我的应用程序将正常运行。

8) 我提供了一个带有 app.config 文件的“基本”应用示例 (就像完整的应用程序一样,它在没有配置文件的情况下运行而不会出错,但在配置文件存在时会失败)

8) 配置文件的设置部分是 12c SYSTEM UDT 实现的示例,但即使省略了 UDT 部分,此小应用程序也会失败并显示相同的错误消息。

9) 目标 CPU:x64

10) 简单代码示例和配置文件:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    '
    Dim cn As New Oracle.DataAccess.Client.OracleConnection
    '
    ' Change the following to your connection string        
    Dim cs As String = "Data Source=orcl;User Id=system;  Password=myOraclePW;"
   '
    cn.ConnectionString = cs
    '
    cn.Open()
    '
    MessageBox.Show("Oracle.DataAccess.Client.OracleConnection Open")
    '
    cn.Close()
    '
End Sub

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
  <configuration>

  <startup>        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>

  <oracle.dataaccess.client>
    <settings><add name="OraSYSTEM.SYSTEM.AQ$_QUEUES.AQ$_SUBSCRIBERS" 
               value="udtMapping factoryName='myApp.ListFactory_1, myApp' typeName='AQ$_SUBSCRIBERS' schemaName='userPW' dataSource='SYSTEM'"/>
    </settings>
  </oracle.dataaccess.client>

</configuration>

这是我第一次向在线论坛提交问题,所以我希望是最好的!我相信自 Oracle 11g 和/或 Visual Studio 2010 以来发生了一些变化,我并没有做任何事情来适应这些变化,但对于我的生活,我不知道它是什么。 (我希望这是我忽略的一些小事和/或愚蠢的事情,但我已经用完了“试试这个”的想法)

感谢您的帮助和问候,

格雷格

【问题讨论】:

    标签: connection runtime-error app-config oracle12c odp.net


    【解决方案1】:

    2018 年 1 月 28 日更新:

    问题解决了!!!!

    就像我想的那样,这是“一些小而愚蠢的事情”。 解决方案是使用 Instant Client(64 位)安装中的 Oracle.DataAccess.dll,而不是数据库安装中的那个。在没有 app.config 文件并使用数据库安装 .dll 的情况下让我的应用程序成功运行,我被甩了。 我仍然不确定为什么在安装 Instant Client(和 ODAC)时只在 GAC 中安装了 ODP.NET 的托管版本而不是非托管版本。 无论如何,由于 GAC 加载先于本地应用程序版本,我应该在任何一种情况下都被覆盖。

    希望这可以为其他人节省一些时间和痛苦。

    格雷格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多