sql >> Databáze >  >> RDS >> Oracle

VS2010 + ovladač Oracle:ORA-12154:TSN:Nelze vyřešit zadaný identifikátor připojení

Nejlepším řešením, které jsem našel, bylo použít knihovnu Oracle Data Access Client a zahrnout celý záznam názvů TNS do připojovacího řetězce. To umožňuje snadnou publikaci projektu na webový server, ClickOnce atd.

Zde jsou kroky potřebné k nastavení ovladače Oracle pracujícího ve vašem projektu:

1) Získejte knihovny DLL z balíčku 'Oracle Data Provider for .NET'

Stáhněte si instalační soubor z tohoto umístění:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html

Pokračoval jsem a nainstaloval jsem plných 200 MB ODAC pomocí nástrojů Oracle Developer Tools for Visual Studio, ale z tohoto stažení opravdu potřebujete pouze čtyři knihovny DLL. (Možná je budete moci extrahovat přímo z instalačního balíčku, místo abyste procházeli celým instalačním procesem, nebo možná jeden z menších souborů ke stažení je obsahuje všechny.)

2) Referenční knihovny DLL ve vašem projektu

Prohledejte instalační adresář klienta Oracle Data Access Client a přetáhněte následující čtyři knihovny DLL do kořenového adresáře vašeho projektu:

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

Nastavte Kopírovat do výstupního adresáře vlastnost všechny soubory kromě Oracle.DataAccess.dll na Kopírovat vždy .

V části Projekt --> Přidat referenci... , klikněte na tlačítko Procházet a vyberte soubor Oracle.DataAccess.dll.

3) Použijte ovladač s úplným připojovacím řetězcem (volitelné)

Abych se nemusel starat o nastavování souborů názvů TNS na počítačích, na kterých byla aplikace nasazena, vložil jsem celou definici do souboru, jak ukazuje connectionstrings.com . Díky tomu je připojovací řetězec trochu objemný, ale odstranilo to mnoho bolestí hlavy ze souboru TNS Names, které jsem zažíval dříve:

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

Zde je celá třída, kterou jsem použil k testování ovladače:

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. Jak špatné je ignorování výjimky Oracle DUP_VAL_ON_INDEX?

  2. Vnořený model sady, počítejte položky v kategoriích

  3. Vyhledávání v blízkosti v Mapách Google, PHP a MySQL

  4. Přepište Query Optimizer pro vaše spojení T-SQL pomocí FORCEPLAN