是否可以将 oracle.managed.dataaccess 与 oracle 客户端 11.2.03 32 位一起使用?

Is it possible to use oracle.managed.dataaccess with oracle client 11.2.03 32bit?

编辑(找到可行的解决方案!):

For some reason my app would not pick up the tnsname file, unless I removed the other naming methods from .ora file (order of naming methods, tnsnames, EZCONNECT, LDAP), as you can see the order of precedence is correct. I did not want to remove the those naming methods from the sqlnet.ora file but by adding the following setting suggested by Dan Keller in conjunction with the TNS_ADMIN setting I already had, Oracle was able to pick up the TNS name file. so to clarify setting element looks like this,

<settings>
        <setting name="NAMES.DIRECTORY_PATH" value="TNSNAMES"></setting>
        <setting name="TNS_ADMIN" value="d:\oracle\product.2.0\client_1\network\admin\"/>                
</settings>

我有一个网络应用程序

我已经从 Nuget 下载了以下 Oracle 托管数据访问 https://www.nuget.org/packages/Oracle.ManagedDataAccess/12.1.22

开发服务器上当前的oracle客户端是11.2.0.3 32bit

我已将 web.config 设置为包含以下内容

  <settings>

    <setting name="TNS_ADMIN" value="d:\oracle\product.2.0\client_\network\admin"/>


  </settings>

</version>

但是我收到以下错误:

'OracleInternal.Network.AddressResolution' 的类型初始值设定项引发异常。

有什么建议吗?谢谢。

[编辑] 例外

中有更多信息

'OracleInternal.Network.AddressResolution' 的类型初始值设定项引发异常。 在 OracleInternal.Network.AddressResolution.Resolve(字符串 TNSAlias、ConnectionOption& CO、字符串实例名称) 在 OracleInternal.ConnectionPool.PoolManager3.ResolveTnsAlias(ConnectionString cs) at OracleInternal.ConnectionPool.PoolManager3.Initialize(ConnectionString cs) 在 OracleInternal.ConnectionPool.OraclePoolManager.Initialize(ConnectionString cs) 在 OracleInternal.ConnectionPool.OracleConnectionDispenser3.GetPM(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, Boolean& bAuthenticated, Boolean& newPM) at OracleInternal.ConnectionPool.OracleConnectionDispenser3.Get(ConnectionString cs,PM conPM,ConnectionString pmCS,SecureString securedPassword,SecureString securedProxyPassword) 在 Oracle.ManagedDataAccess.Client.OracleConnection.Open()

Oracle Managed 不使用 TNS 名称文件,而是使用 app/web.config 文件中的自定义配置部分。您可以使用 Oracle 12 托管驱动程序连接到 Oracle 11 数据库。托管驱动器将忽略之前安装的 11g 32 位。

需要注意的一点是,托管驱动器不适用于 Oracle 用户定义类型。

<configuration>
    <system.data>
            <DbProviderFactories>
                <remove invariant="Oracle.ManagedDataAccess.Client"/>
                <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
                    type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
            </DbProviderFactories>
        </system.data>


      <oracle.manageddataaccess.client>
            <version number="*">
                <dataSources>
                    <dataSource alias="DEV11"
                        descriptor=" (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DEV11SVR)(PORT = 1525)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = dev11)))"/>
                </dataSources>
            </version>
        </oracle.manageddataaccess.client>
</configuration>

您的 SQLNET.ORA 文件中有什么,可能是它从 oracle 11 安装中查找 TNSNames 文件,但 oracle 11 配置为在检查 TNSNames 之前先检查 LDAP 或 EZConnect。

您可以覆盖此设置而无需手动输入 TNSNames 中的内容,这是使用 TNSNames 文件的好处,例如,如果您的组织更改服务器并且数据库组管理 TNSNames 文件。

<oracle.manageddataaccess.client>
    <version number="*">
        <settings>
            <setting name="NAMES.DIRECTORY_PATH" value="TNSNAMES"></setting>
        </settings>
    </version>
</oracle.manageddataaccess.client>