2016-04-13 3 views
0

Von C# nicht ich eine Verbindung zu Oracle mit OleDb Sie folgendermaßen vorgehen:Eröffnung Oracle OLEDB-Verbindung erfolgreich ist, während verwaltet Mitnehmeranschluss

String connectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=x;Password=y;Data Source=z"; 

var connection = new System.Data.OleDbConnection(connectionString); 
connection.Open(); 

Das funktioniert gut.

Aus dem gleichen Prozess, ich versuche das verwaltete Fahrer tun die folgenden verbinden mit:

String connectionString = "USER ID=x;PASSWORD=y;DATA SOURCE=z"; 

var connection = new Oracle.ManagedDataAccess.Client.OracleConnection(connectionString); 
connection.Open(); 

, die mit dem folgenden Fehler fehl:

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS:could not resolve the connect identifier specified 
    at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName) 
    at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor) 
    at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, String instanceName) 

Server stack trace: 
    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() 

ich Fehler wie erhalten dies in der Vergangenheit, als es ein Problem mit Tns-Namen gab, aber ich hatte nie eine Situation, in der OleDb funktioniert, wenn der verwaltete Treiber nicht funktioniert.

ich doppelt überprüft haben und der Benutzer, Passwort und Datenquelle sind in den beiden Verbindungszeichenfolgen identisch.

+0

Was ist in Ihren TNSNames? – Wjdavis5

+0

Könnten Sie versuchen .. ohne TNS-Namen? https://www.connectionstrings.com/oracle-data-provider-for-net-odp-net/using-odpnet-without-tnsnamesora/ – granadaCoder

Antwort

0

ODP.NET Managed-Treiber verwendet eine andere Art und Weise für tnsnames.ora von suchen, resp. sqlnet.ora als OraOLEDB tut.

Zum Beispiel liest OraOLEDB die Registry für TNS_ADMIN Wert, während ODP.NET Treiber Managed nicht. Weitere Informationen finden Sie unter Determining locatation of relevant tnsnames.ora file.

Eine Lösung besteht darin, eine Umgebungsvariable TNS_ADMIN mit Ordnernamen festzulegen, in der sich und sqlnet.ora Dateien befinden. Soweit ich weiß, haben die Umgebungsvariablen Vorrang vor (fast) allen anderen Einstellungen sowohl in ODP.NET Managed Driver als auch in OraOLEDB.

+0

Dies erwies sich als der Fall. ODP konnte keine TNS-Namen finden, obwohl OleDb dies konnte. –

0

Klingt wie Ihre TNSNames Setup nicht korrekt ist. Sie tun können, auch eine Verbindungszeichenfolge wie folgt tnsnames mit umgehen

static string constr = @"Data Source=(DESCRIPTION= 
     (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=yourhostname)(PORT=1521))) 
     (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE))); 
     User Id=system ;Password=yourpasswrd"; 

this is error ORA-12154: TNS:could not resolve the connect identifier specified?

+0

Danke. Diese Problemumgehung hat mich verbunden (wie auch das Easy Connect-Format von Oracle - host: [port]/[service_name]). Es stellte sich jedoch heraus, dass der ODP-Treiber tnsnames selbst dann nicht finden konnte, wenn OleDb dies konnte. –

Verwandte Themen