Je ne peux pas croire que je dois poser cette question, mais je ne peux pas me connecter à une base de données Oracle 11g.
Ce qui suit fonctionne lors de l’utilisation de System.Data.OracleClient
- mais bien évidemment, il est amorti . Lors de l’utilisation du même code mais de Oracle.DataAccess.OracleClient
, j’obtiens l’erreur suivante.
{"ORA-12545: Connect failed because target Host or object does not exist"}
Voici mon code
using (OracleConnection con = new OracleConnection("Data Source=orac;User Id=SYSTEM; Password=Pass;"))
{
con.Open();
Console.WriteLine("Connection opened");
OracleCommand cmd2 = new OracleCommand("SELECT * FROM SYSTEM.TABLE", con);
OracleDataReader oracleDataReader = cmd2.ExecuteReader();
while (oracleDataReader.Read())
{
Console.WriteLine(oracleDataReader[0]);
}
}
Quelqu'un pourrait-il m'aider avec ce que je fais mal?
Je devais changer le programme en 32 bits pour que le Oracle.DataAccess.dll
soit chargé.
Est-ce même la bonne bibliothèque à utiliser ???
Merci
MODIFIER
fichier tnsnames.ora comme suit:
# tnsnames.ora Network Configuration File:
C:\app\UserName\product\11.2.0\dbhome_3\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orac.example.com)
)
)
LISTENER_ORAC =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))
METTRE À JOUR
J'ai essayé de me connecter à l'aide du développeur Oracle SQL. Cela fonctionne tant que j'utilise le type de connexion TNS, mais ne fonctionne pas si j'utilise le type de connexion Basic.
J'ai aussi remarqué que dans mes services il y a 2 appelés
OracleOraDb11g_home1TNSListener OracleOraDb11g_home2TNSListener
L'orac dbhome est home3 Je crois, est-ce que cela pourrait être le problème ?? Si oui, est-ce que quelqu'un sait comment j'y remédierais?
Merci
UPDATE Dans HKEY_LOCAL_MACHINE\SOFTWARE\Oracle \, il existe deux propriétés (valeur par défaut) et inst_loc. Il y a quelques dossiers dont deux appelés "KEY_OraDb11g_home1" et "KEY_OraDb11g_home2". Ils contiennent tous deux une propriété appelée Oracle_HOME. Ils sont:
KEY_OraDb11g_home1 - Oracle_HOME = C:\app\Nom d'utilisateur\product\11.2.0\dbhome_2 KEY_OraDb11g_home2 - Oracle_HOME = C:\app\Nom d'utilisateur\product\11.2.0\dbhome_3
Le SID de la base de données de home1 s'appelle OracleDev. Je l'ai peut-être déjà installé il y a longtemps, mais je n'en ai certainement pas besoin maintenant s'il pose un problème.
Merci
MODIFIER
Essayons autre chose.
Il est possible que ODP.NET ne sache pas où trouver votre Oracle Home car il n'est pas défini dans votre variable d'environnement PATH , ou s'il n'est pas défini dans le registre.
Vérifiez votre CHEMIN et assurez-vous qu’il contient votre répertoire Oracle Home et "Oracle Home\bin". Pour le registre, cherchez HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\
. Dans celui-ci, il devrait y avoir une clé appelée HOME0
avec une valeur de chaîne de Oracle_HOME
. Assurez-vous qu'il pointe vers votre maison Oracle.
Avait un problème similaire:
Visual Studio a utilisé la mauvaise version de tnsnames.ora dans ..\11.2.0\client_1\network\admin
TNS Ping a utilisé la version correcte de tnsnames.ora dans ..\11.2.0\client_2\network\admin
Par conséquent, tnsping a réussi mais Visual Studio a renvoyé: ORA-12545: La connexion a échoué car l'hôte ou l'objet cible n'existe pas.
La solution, probablement pas la meilleure, a copié la version correcte de tnsnames.ora dans ..\11.2.0\client_1\network\admin
Vérifiez le fichier de l'hôte, sous C:\windows\system32\drivers\etc, surtout si la machine est VM et que l'adresse IP de l'hôte local peut changer, si l'adresse IP de VM n'est pas statique. Changer l'IP de l'hôte local sur ce fichier si nécessaire