运行数据库应用程序时遇到以下错误异常:
''Oracle.DataAccess.Client.OracleConnection'的类型初始值设定项引发了一个异常。 ConfigurationErrorsException:无法识别的配置节oracle.dataaccess.client。
我多年来一直使用相同的技术来处理Oracle Collection用户定义类型(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以来发生了一些变化,我没有采取措施来适应这些变化,但对于我的生活,我不知道它是什么。 (我希望我忽略了一些小事和/或愚蠢的东西,但我已经没有“试试这个”的想法了)
感谢您的帮助和问候,
格雷格
答案 0 :(得分:0)
1/28/2018更新:
解决问题!!!!
就像我想的那样,它是“小而愚蠢的东西”。 解决方案是使用Instant Client(64位)安装中的Oracle.DataAccess.dll而不是数据库安装中的安装。在没有app.config文件并使用数据库安装.dll的情况下让我的应用程序成功运行,我被抛弃了。 我还不确定为什么在安装Instant Client(和ODAC)时,只在GAC中安装了ODP.NET的托管版本,而不是非托管版本。 无论如何,在GAC加载优先于本地应用程序版本的情况下,无论哪种情况都应该涵盖。
希望这可能会为别人节省一些时间和痛苦。
格雷格