Драйвер Oracle VS2010 +: ORA-12154: TSN: не удалось разрешить указанный идентификатор подключения - PullRequest
3 голосов
/ 19 ноября 2010

Я использую:

  • Visual Studio 2010
  • .Net Data Provider для Oracle
  • Инструменты разработчика Oracle для Visual Studio (с веб-сайта Oracle)

Я попытался установить 'Oracle Developer Tools for Visual Studio' и создал файлы tnsnames.ora и sqlnet.ora в моем C: \ app \ [мое имя пользователя] \ product \ 11.2.0 \ client_1 \ Network\ Админ каталог.

Они выглядят так:

# tnsnames.ora

ORATEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbs-oratest)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = [ORATEST])
    )
  )

и

# sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (ALL)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

Когда я пытаюсь использовать драйвер поставщика данных .Net Framework для Oracle, чтобы установить новое соединение (или любой другой драйвер по этому вопросу: OLE, ODBC и т. д.) выдает ошибку:

ORA-12154: TSN: не удалось разрешить указанный идентификатор соединения

Использование драйвера OLE на компьютере без установленного клиента Oracle работает, хотя:

OleDbConnection conn = new OleDbConnection(
    "Provider=MSDAORA;Data Source=ORATEST;" + 
    "Persist Security Info=True;Password=readonly;User ID=readonlyuser");

Что я делаю не так?Есть ли в Интернете простые инструкции по установке базового драйвера Oracle?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 27 октября 2011

Лучшим решением, которое я нашел, было использование клиентской библиотеки Oracle Data Access и включение всей записи имен TNS в строку подключения.Это позволяет легко публиковать проект на веб-сервере, в ClickOnce и т. Д.

Вот шаги, необходимые для настройки драйвера Oracle, работающего в вашем проекте:

1)Получить библиотеки DLL из пакета «Поставщик данных Oracle для .NET»

Загрузить файл установщика из этого места: http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

Я установил ODAC на 200 МБ полностью с Oracle DeveloperИнструменты для Visual Studio, но вам действительно нужно только четыре DLL из этой загрузки.(Возможно, вы сможете извлечь их непосредственно из пакета установщика, вместо того чтобы проходить весь процесс установки, или, возможно, одна из загрузок меньшего размера включает в себя все из них.)

2) Справочные библиотеки DLL вваш проект

Найдите каталог установки клиента доступа к данным Oracle и перетащите следующие четыре DLL в корень вашего проекта:

  • Oracle.DataAccess.dll
  • oci.dll
  • oraciicus11.dll
  • OraOps11w.dll

Установить Копировать в выходной каталог все свойствафайлы, кроме Oracle.DataAccess.dll, в Копировать всегда .

В Проект -> Добавить ссылку ... , нажать на Просмотрите вкладку и выберите файл Oracle.DataAccess.dll.

3) Используйте драйвер с полной строкой подключения (необязательно)

Так что нетбеспокоиться о настройке файлов имен TNS на компьютерах, на которых было развернуто приложениечтобы я поместил полное определение в файл, как показано connectionstrings.com .Это делает строку подключения немного громоздкой, но устраняет много проблем с файлами имен TNS, которые я испытывал раньше:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=‌​1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;

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

using System;
using System.Data;
using Oracle.DataAccess.Client;

static class Program
{
    [STAThread]
    static void Main()
    {
        TestOracle();
    }

    private static void TestOracle()
    {
        string connString = 
            "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" + 
            "(HOST=servername)(PORT=‌​1521)))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+ 
            "User Id=username;Password=********;";
        using (OracleConnection conn = new OracleConnection(connString))
        {
            string sqlSelect = "SELECT * FROM TEST_TABLE";
            using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
            {
                var table = new DataTable();
                da.Fill(table);

                if (table.Rows.Count > 1) 
                    Console.WriteLine("Successfully read oracle.");
            }
        }
    }
}
1 голос
/ 19 ноября 2010

Вместо этого следует использовать клиентскую библиотеку Oracle Data Access, а затем объект OracleConnection.

http://www.oracle.com/technology/sample_code/tech/windows/odpnet/howto/connect/index.html

Я знаю, что Oracle довольно требователен к файлу имен TNS.Я обычно рассчитываю на DBA для этого.SQL-сервер гораздо проще освоить ...

0 голосов
/ 11 июля 2013

Код, который я использую, - выше.

П.С .: Я проверял много раз. Использование Visual Studio .Net 2010 (VB.Net 2010).

Dim conn As New Odbc.OdbcConnection
Dim cmd As New Odbc.OdbcCommand
Dim drResult As Odbc.OdbcDataReader
Dim connString As String
Dim QuerySQL As String

connString = "Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLEDB01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE_INSTANCE_NAME)));Uid=john;Pwd=mypassword;"
QuerySQL = "select first_name, last_name from employees where id = 28"

conn.ConnectionString = connString
conn.Open()
cmd.Connection = conn
cmd.CommandText = QuerySQL
drResult = cmd.ExecuteReader()

While drResult.Read
    TextBox1.Text = TextBox1.Text & drResult("last_name") & ", " & drResult("first_name") & Environment.Newline
End While
drResult.Close()
0 голосов
/ 06 февраля 2013

Использование локального веб-сервера IIS вместо сервера разработки Visual Studio (Project Settings - WEB) помогло мне!

Tns-12154 заставил меня выдернуть волосы ... веб-сайт хорошо работал в VS2008...

С уважением,

Майк

...