C# ODP.NET连接异常
首先,我想说的是,我对Oracle数据库一点也不熟悉,所以我的词汇可能选得不好,我对某些概念的理解可能是错误的。。。 无论如何,我正在尝试使用ODP.NET连接到Oracle 11g数据库,每次它都会出现以下异常:C# ODP.NET连接异常,c#,oracle,odp.net,C#,Oracle,Odp.net,首先,我想说的是,我对Oracle数据库一点也不熟悉,所以我的词汇可能选得不好,我对某些概念的理解可能是错误的。。。 无论如何,我正在尝试使用ODP.NET连接到Oracle 11g数据库,每次它都会出现以下异常: System.TypeInitializationException occurred HResult=-2146233036 Message=The type initializer for 'OracleInternal.Network.AddressResolution' th
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:
致电:
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服务
我尝试了以下连接字符串,第一个在debug中工作(并且是由应用程序构造的):
有什么想法吗 我猜连接字符串是个问题。一些建议:
这家伙帮我解决了问题 解决方案是从sql.ora文件的NAMES.DIRECTORY_路径中删除LDAP。此文件位于客户端主目录中(此路径可在HLM/SOFTWARE/ORACLE下注册表中的一个项上找到)。所以文件的内容从
SQLNET.AUTHENTICATION_SERVICES= (none)
NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)
到
现在它工作了!我不知道为什么它在我的开发机器上工作(可能是因为它没有安装Oracle)
希望它能帮助别人 除了如上所述修复sqlnet.ora外,还要检查TNS_ADMIN环境变量是否指向Oracle客户端的正确network\ADMIN路径。一旦这是正确的,重新启动,一切都应该很好 你能告诉我你在哪里实例化了dbConnection吗?它可能像坏连接字符串一样简单。Oracle的错误消息并不总是直观的。没有tnsnames的连接应该没有问题(从长远来看,这可能会帮你省去头疼)。您的Oracle客户端在.NET之外运行良好?显示构造字符串的代码会使我的文章变得混乱,但我添加了我尝试过的连接字符串。我认为我的Oracle客户端很好,因为我可以使用SQLDeveloper查询我的数据库。如果您有更好的测试来检查我的Oracle是否安装良好,请告诉我,因为我对Oracle的东西非常陌生。我可以从sqlDeveloper运行查询,所以我认为这部分很好。我试图直接修改连接字符串,但每次更改都会抛出相同的异常,就好像它根本没有尝试过一样。如果您愿意,我可以重试我的字符串并复制到这里,这会有用吗?是的,这是个好主意。将它们添加到您的问题中。我想你需要做一点实验,直到你做对为止。我也有同样的问题!我的路径是:
“C:\oracle\instantclient\u 11\u 1\SQLNET.ORA”
@wetwillie是否有办法将其存储在项目中,而不是运行它的机器的注册表中?我试图将Oracle涉及的所有内容都保留在我的项目中。我不想在部署应用程序的计算机上安装任何东西。看起来我可以在app.config中的
块下添加
块,并包括那里的sql.ora文件中的所有设置。通过将其添加到我的app.config
,而不是我也必须删除的
,我终于可以正常工作了LDAP。我仍然有问题,但重新启动IIS后,它开始工作。这些文件似乎已缓存,因此,如果仍然存在问题,请确保重新启动IIS。
SQLNET.AUTHENTICATION_SERVICES= (none)
NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES= (none)
NAMES.DIRECTORY_PATH= (EZCONNECT, TNSNAMES)