是否可以将 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.PoolManager
3.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.OracleConnectionDispenser
3.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>
编辑(找到可行的解决方案!):
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.PoolManager
3.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.OracleConnectionDispenser
3.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>