Oracle error ORA-12154

Рейтинг: 0Ответов: 1Опубликовано: 28.01.2015

Доброго времени суток, уважаемые форумчане.

Возник вопрос по работе с Бд Oracle из Visual Studio 2013 (C#). При попытке подключения к БД Oracle выдает следующую ошибку:

ORA-12154: TNS:could not resolve the connect identifier specified

Вот код подключения:

using System.Web.Mvc;
using Oracle.ManagedDataAccess.Client;


string oradb = "Data Source=WorkTest;User Id=C##;Password=123;";
            OracleConnection conn = new OracleConnection(oradb);  // C#
            conn.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select * from ааа";
            cmd.CommandType = CommandType.Text;
            OracleDataReader dr = cmd.ExecuteReader();
            dr.Read();
            var cc = dr.GetString(0);
            conn.Dispose();

Ошибка валится на этапе: conn.Open();.
По результатам поиска вроде как причина может быть в файле tnsnames.ora. Файл tnsnames.ora содержит следующее:

# tnsnames.ora Network Configuration File: D:\app\username\product\12.1.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_WORKTEST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


WORKTEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = WorkTest)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Подскажите, что и куда смотреть... а то уже второй день зависаю. ((
(С Oraclу до сего момента не работал:()

Вот:

alt text

На сервере есть такой sid WorkTest? Вот:

alt text

Вот создал с TNS, все приконектилось:

alt text

Вот еще попробовал через SQL PLUS приконектится, вроде все получилось, но почему-то не проходят команды SQL, хоть и должны:

alt text

Обновление

Да в том то и дело, что я половину параметров даже не знаю как проверять:(

файл sqlnet.ora содержит

# sqlnet.ora Network Configuration File: D:\app\username\product\12.1.0\dbhome_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

вроде все везде есть, а что делать не знаю(

а вот и решение проблемы:

уже пробовал все что можно), вчера полночи сидел. Вот кому интересно будет, методика проверки по данной ошибке в SQL Plus: https://www.youtube.com/watch?v=QVJ1xO2V7Dc. Шел по ней, и все отлично у меня, но через VS 2013 все равно валит ошибку. Но причина, как всегда, оказалась банальна до безобразия:(, необходимо в строке соединения вместо Data Source=WorkTest, указать Data Source=localhost:1521/WorkTest... и всё!!!!... сейчас одни эмоции:(.. а на оф. сайте указано, что надо Data Source=WorkTest... эх Огромное спасибо всем, кто помогал). Вопрос решен, конект прошел)

Ответы

▲ 2

Так как у вас из SQL/Developer соединение проходит по протоколу TNS, значит проблема в C#.

Проверьте настройки переменных окружения ORACLE_HOME и PATH. В переменной окружения PATH должен быть указан путь где лежит oci.dll.

Попробуйте найти исходный код программы на гитхаб которая конектится к БД ORACLE, и проверить как она работает.