Oracle ASP.NET: problema TNS
Domanda
Sto provando a collegarsi al mio Oracle DB con ASP.NET/C #.
Ecco il mio codice:
OracleConnection connection = new OracleConnection();
connection.ConnectionString = @"Data Source=ORACLEDB;User id=me;Password=xxxx;";
try
{
connection.Open();
}
catch (Exception ex)
{
Console.WriteLine("Exception occurs when connecting to DB : " + ex.Message + ex.StackTrace);
}
e qui è l'errore che ottengo:
ORA-12154: TNS : the identifier could not be solved
Ecco la mia tnsnames.ora:
ORACLEDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myComputer.myDomain)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = ORACLEDB)
)
)
Io lavoro su un server win2k3 R2.
Oracle è sullo stesso server. E 'Oracle 11g.
Quando faccio un tnsping, ottengo questo:
EZCONNECT adapter used to resolved the alias
Tentative de contact de (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=169.254.216.123)(PORT=1521)))
OK (20 msec)
E qui è il mio listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = myComputer.myDomain)(PORT = 1521))
)
)
Soluzione
Mettere la stringa di connessione nel web.config:
<connectionStrings>
<add name="OracleDatabase"
connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME= ORACLEDB)));User Id= me;Password= xxx;Persist Security Info=True;"
providerName="System.Data.OracleClient" />
</connectionStrings>
E quindi ottenere la stringa di connessione dal web.config:
connection.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
Altri suggerimenti
Prova a usare TNSPING per identificare il problema. Si tratta di un programma di utilità trovato nel vostro oracle home directory / bin.
Qual è l'adattatore EZConnect? Forse tnsping e il tuo codice utilizzano driver diversi?
Prova a usare l'indirizzo IP del vostro database nella stringa di connessione nel codice. Questo potrebbe mostrare che cosa sta causando il problema.
Quando provo ad usare computer.dominio come origine dati nella mia stringa di connessione dà il codice di errore
ORA-12504 : TNS : the listener processus didn't obtain SERVICE_NAME in CONNECT_DATA
.
Idk ciò EZConnect è: -)
il comando tnsping localhost dare a questo:
C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
Adaptateur TNSNAMES utilisé pour la résolution de l'alias
Tentative de contact de (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myComputer.myDomain)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORACLEDB)))
OK (20 msec)
Forse potrebbe aiutare: quando provo a collegare il mio DB utilizzando SQL Inoltre, funziona benissimo ...
Grazie mille per il vostro aiuto.