Oracle
 sql >> Baza danych >  >> RDS >> Oracle

VS2010 + sterownik Oracle:ORA-12154:TSN:nie można rozpoznać określonego identyfikatora połączenia

Najlepszym rozwiązaniem, jakie znalazłem, było użycie biblioteki Oracle Data Access Client i uwzględnienie całego wpisu nazw TNS w ciągu połączenia. Dzięki temu projekt można łatwo opublikować na serwerze internetowym, ClickOnce itp.

Oto kroki niezbędne do skonfigurowania sterownika Oracle działającego w Twoim projekcie:

1) Pobierz biblioteki DLL z pakietu „Oracle Data Provider for .NET”

Pobierz plik instalatora z tej lokalizacji:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html

Poszedłem dalej i zainstalowałem pełny 200 MB ODAC z Oracle Developer Tools for Visual Studio, ale tak naprawdę potrzebujesz tylko czterech bibliotek DLL z tego pobrania. (Możesz być w stanie wyodrębnić je bezpośrednio z pakietu instalacyjnego, zamiast przechodzić przez cały proces instalacji, lub być może jedno z mniejszych plików do pobrania zawiera je wszystkie.)

2) Odwołaj się do bibliotek DLL w swoim projekcie

Przeszukaj katalog instalacyjny Oracle Data Access Client i przeciągnij następujące cztery biblioteki DLL do katalogu głównego projektu:

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

Ustaw Kopiuj do katalogu wyjściowego właściwość wszystkich plików z wyjątkiem Oracle.DataAccess.dll do Kopiuj zawsze .

W sekcji Projekt --> Dodaj odniesienie... , kliknij Przeglądaj i wybierz plik Oracle.DataAccess.dll.

3) Użyj sterownika z pełnymi parametrami połączenia (opcjonalnie)

Aby nie martwić się konfiguracją plików nazw TNS na komputerach, na których aplikacja została wdrożona, umieściłem całą definicję w pliku, tak jak pokazuje connectionstrings.com . To sprawia, że ​​ciąg połączenia jest trochę nieporęczny, ale usunęło wiele problemów związanych z plikami TNS Names, których doświadczałem wcześniej:

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

Oto pełna klasa, której użyłem do przetestowania sterownika:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można znaleźć sterownika Oracle jdbc

  2. Jak uzyskać starszą wersję OracleClient do lokalnej pracy z platformą .NET?

  3. Porównaj wiersze w tabeli Oracle i zaktualizuj pasujące

  4. jak wywołać funkcję w funkcji plsql

  5. Podciąg przy użyciu Oracle Kiedy istnieje wiele dopasowań?