Oracle asp.net: выпуск TNS
Вопрос
Я пытаюсь подключиться к своему DB Oracle с ASP.NET/C#.
Вот мой код:
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);
}
И вот ошибка, которую я получаю:
ORA-12154: TNS : the identifier could not be solved
Вот мой tnsnames.ora:
ORACLEDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myComputer.myDomain)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = ORACLEDB)
)
)
Я работаю на сервере win2k3 R2.
Oracle находится на том же сервере. Это Oracle 11g.
Когда я делаю tnsping, я получаю это:
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)
А вот мой слушатель.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))
)
)
Решение
Поместите строковое соединение в 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>
А затем получите строку подключения из Web.Config:
connection.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
Другие советы
Попробуйте использовать TNSPING, чтобы диагностировать вашу проблему. Это утилита, найденная в вашем каталоге Oracle Home/Bin.
Что такое адаптер ezconnect? Может быть, tnsping и ваш код используют разные драйверы?
Попробуйте использовать IP -адрес вашей базы данных в строке подключения в вашем коде. Это может показать вам, что вызывает проблему.
Когда я пытаюсь использовать mycomputer.mydomain в качестве источника данных в моей строке соединения, он дает код ошибки
ORA-12504 : TNS : the listener processus didn't obtain SERVICE_NAME in CONNECT_DATA
.
Idk, что такое ezconnect :-)
Команда Tnsping Localhost дает это:
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)
Может быть, это может помочь: когда я пытаюсь подключить свой БД с помощью SQL Plus, он работает нормально ...
Большое спасибо за твою помощь.