首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODP.NET连接异常

ODP.NET连接异常
EN

Stack Overflow用户
提问于 2014-08-26 14:30:31
回答 3查看 11.9K关注 0票数 8

首先,我想说我对Oracle数据库一点也不熟悉,所以我的话可能选错了,我对某些概念的理解可能是错误的。无论如何,我正在尝试使用ODP.NET连接到Oracle11g数据库,每次都会出现这个异常:

代码语言:javascript
复制
System.TypeInitializationException occurred
HResult=-2146233036
Message=The type initializer for 'OracleInternal.Network.AddressResolution' threw an exception.
Source=Kiwi.ServiceBase
TypeName=OracleInternal.Network.AddressResolution
StackTrace:
    at OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd, String instanceName)

    at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)

    at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)

    at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)

    at Oracle.ManagedDataAccess.Client.OracleConnection.Open()

    at Kiwi.DataAccess.OracleDataService.get_DbConnection() in c:\Projects\Kiwi-Beta7-0\Kiwiweb\src\Common\ApplicationServices\DataService\OracleDataService.cs:line 28

    InnerException: System.TypeInitializationException
        HResult=-2146233036
        Message=The type initializer for 'OracleInternal.Network.LDAP' threw an exception.
        Source=Oracle.ManagedDataAccess
        TypeName=OracleInternal.Network.LDAP
        StackTrace:
            at OracleInternal.Network.LDAP..ctor()
            at OracleInternal.Network.AddressResolution..cctor()
        InnerException: System.NullReferenceException
            HResult=-2147467261
            Message=Object reference not set to an instance of an object.
            Source=Oracle.ManagedDataAccess
            StackTrace:
                at OracleInternal.Network.LDAP._LDAP(Hashtable dsMap)
                at OracleInternal.Network.LDAP..cctor()
            InnerException:

打电话来:

代码语言:javascript
复制
private System.Data.IDbConnection _dbConnection;
public override IDbConnection DbConnection
{
    get
    {
        if (_dbConnection.State == ConnectionState.Closed)
            _dbConnection.Open();        // Crash from HERE
        return _dbConnection;
    }
}

编辑附加信息:我也试图在没有tnsname.ora文件的情况下进行连接。这是运行在数据库所在的同一服务器上的windows服务。

我尝试了以下连接字符串,第一个在调试中工作(并且是由应用程序构造的):

代码语言:javascript
复制
Data Source=demosyr20140329:1521/demosyr;User ID=SEI;password=manager;Pooling = False;

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)       (HOST=DEMOSYR20140329)(PORT=1521))(CONNECT_DATA=(SID=DEMOSYR)));User Id=system;Password=manager;

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DEMOSYR20140329)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMOSYR)));

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DEMOSYR20140329)(PORT=1521))(CONNECT_DATA=(SID=DEMOSYR)));  User Id=system;Password=manager;

User Id=system;Password=manager;Data Source=oracle

Data Source=system/manager@//DEMOSYR20140329:1521/DEMOSYR;

知道吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-26 17:59:24

这家伙帮我解决了我的问题https://pravsdatums.wordpress.com/2013/12/16/ocac-12c-and-visual-studio-developer-tools/#comment-1

解决方案是从NAMES.DIRECTORY_PATH文件中删除sql.ora。此文件位于客户端主目录(此路径可在注册表的HLM/SOFTWARE/ORACLE下的一个键上找到)。所以文件的内容从

代码语言:javascript
复制
SQLNET.AUTHENTICATION_SERVICES= (none)

NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)

代码语言:javascript
复制
SQLNET.AUTHENTICATION_SERVICES= (none)

NAMES.DIRECTORY_PATH= (EZCONNECT, TNSNAMES)

现在起作用了!我不知道它为什么在我的开发机器上工作(也许是因为Oracle没有安装在它上)。

希望它能帮到别人!

票数 10
EN

Stack Overflow用户

发布于 2014-08-26 14:51:24

我猜连接字符串是个问题。一些建议:

  1. 您能否在本地使用SqlPlus或SqlDeveloper连接到数据库?
  2. 如果(1)的答案是正确的,那么我会尝试在代码中直接修改_dbConnection.ConnectionString,直到正确为止。如果您对sqlplus连接使用tnsnames.ora,我会将代码放在连接字符串中,并验证连接是否正常。我知道这不是你的最终目标,但你必须从某个地方开始。
  3. 如果(1)的答案是错误的,那么在尝试通过ODP.Net进行连接之前,我将首先尝试正确地获得该连接。
票数 0
EN

Stack Overflow用户

发布于 2020-08-13 14:54:56

除了上面描述的修复sqlnet.ora之外,还检查TNS_ADMIN环境变量指向您的Oracle的正确的网络\管理路径。一旦这是正确的,重新启动和一切都应该是好的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25508402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档