Oracle ASP.NET: problème de TNS
Question
Je suis en train de se connecter à mon DB oracle avec ASP.NET/C #.
Voici mon code:
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);
}
et est ici l'erreur que je reçois:
ORA-12154: TNS : the identifier could not be solved
Voici mon TNSNAMES.ORA:
ORACLEDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myComputer.myDomain)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = ORACLEDB)
)
)
Je travaille sur un serveur Win2k3 R2.
Oracle est sur le même serveur. Il est Oracle 11g.
Quand je fais une tnsping, je reçois ceci:
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)
Et voici mon 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))
)
)
La solution
Mettre la connexion chaîne dans le 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>
Et puis obtenir la chaîne de connexion du web.config:
connection.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
Autres conseils
Essayez d'utiliser TNSPING pour diagnostiquer votre problème. Il est un utilitaire qui se trouve dans votre oracle home / bin.
Qu'est-ce que l'adaptateur EZConnect? Peut-être TNSPING et votre code utilisent des pilotes différents?
Essayez d'utiliser l'adresse IP de votre base de données dans la chaîne de connexion dans votre code. Cela pourrait vous montrer ce qui cause le problème.
Lorsque je tente d'utiliser myComputer.myDomain comme source de données dans ma chaîne de connexion donne le code d'erreur
ORA-12504 : TNS : the listener processus didn't obtain SERVICE_NAME in CONNECT_DATA
.
Idk ce EZConnect est: -)
la commande tnsping localhost donner ceci:
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)
Peut-être que cela pourrait aider: quand j'essaie de connecter mon DB en utilisant SQL Plus, il fonctionne très bien ...
Merci beaucoup pour votre aide.