sql >> Database teknologi >  >> RDS >> Oracle

VS2010 + Oracle-driver:ORA-12154:TSN:kunne ikke løse den angivne forbindelses-id

Den bedste løsning, jeg fandt, var at bruge Oracle Data Access Client-biblioteket og inkludere hele TNS-navneindgangen i forbindelsesstrengen. Dette gør det nemt at publicere projektet til en webserver, ClickOnce osv.

Her er de nødvendige trin for at konfigurere Oracle-driveren, der fungerer i dit projekt:

1) Hent DLL'er fra pakken 'Oracle Data Provider for .NET'

Download installationsfil fra denne placering:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html

Jeg gik videre og installerede hele 200 MB ODAC med Oracle Developer Tools til Visual Studio, men du har kun brug for fire DLL'er fra denne download. (Du kan muligvis udtrække dem direkte fra installationspakken i stedet for at gennemgå hele installationsprocessen, eller måske inkluderer en af ​​de mindre downloads dem alle).

2) Reference DLL'er i dit projekt

Søg i installationsmappen for Oracle Data Access Client, og træk følgende fire DLL'er ind i roden af ​​dit projekt:

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

Indstil Kopiér til outputkatalog ejendom alle filerne undtagen Oracle.DataAccess.dll til Kopier altid .

Under Projekt --> Tilføj reference... , klik på Gennemse fanen og vælg filen Oracle.DataAccess.dll.

3) Brug driveren med fuld forbindelsesstreng (valgfrit)

For ikke at skulle bekymre mig om, at TNS-navnefiler bliver sat op på de maskiner, applikationen blev installeret på, satte jeg hele definitionen i filen som vist af connectionstrings.com . Det gør forbindelsesstrengen lidt omfangsrig, men fjernede mange af de TNS Names-filhoveder, jeg oplevede før:

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

Her er hele klassen, jeg brugte til at teste driveren:

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. EM SQL Monitor Impact

  2. De bedste alarm- og notifikationsværktøjer til PostgreSQL

  3. oracle pl/sql funktion navn opløsning fejl

  4. n. percentilberegninger i postgresql