2010-11-19 10 views
3

J'utilise:VS2010 + pilote Oracle: ORA-12154: TSN: ne peut pas résoudre l'identifiant de connexion spécifié

  • Visual Studio 2010
  • Framework .Net Data Provider for Oracle
  • Outils Oracle Developer pour Visual studio (depuis le site Web d'Oracle)

J'ai essayé d'installer 'Outils Oracle Developer pour Visual studio' et créé tnsnames.ora et fichiers sqlnet.ora dans mon C: \ app \ [mon nom d'utilisateur] \ produit \ 11.2 .0 \ client_ 1 \ Network \ Admin répertoire.

Ils ressemblent à ceci:

# tnsnames.ora 

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

et

# sqlnet.ora 

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

Lorsque je tente l'aide du fournisseur de .Net Framework de données pour le pilote Oracle pour mettre en place une nouvelle connexion (ou tout autre conducteur pour que question: OLE, ODBC, etc) il donne l'erreur:

ORA-12154: TSN: n'a pas pu résoudre l'identificateur de connexion spécifié

Utilisation du pilote OLE sur une machine sans le client Oracle installé fonctionne bien:

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

Qu'est-ce que je fais mal? Existe-t-il des instructions simples en ligne sur l'installation d'un pilote Oracle de base?

Merci d'avance!

Répondre

4

La meilleure solution que j'ai trouvée était d'utiliser la bibliothèque Oracle Data Access Client, et d'inclure l'ensemble des noms TNS dans la chaîne de connexion. Cela permet au projet d'être facilement publié sur un serveur web, ClickOnce, etc.

Voici les étapes nécessaires pour configurer le pilote Oracle travaillant dans votre projet:

1) Obtenir DLLs de « Oracle Data fournisseur de paquet .NET »

Télécharger le fichier d'installation de cet endroit: http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

je suis allé de l'avant et installé le plein de 200 Mo ODAC avec Oracle Developer Tools pour Visual studio, mais vous ne vraiment besoin de quatre DLLs de cette Télécharger. (Vous pouvez peut-être les extraire directement du package d'installation, au lieu de passer par le processus d'installation complet, ou peut-être que l'un des téléchargements les plus petits les inclut tous.)

2) DLLs de référence dans votre projet

Rechercher le répertoire d'installation du client Oracle Data Access et faites glisser les quatre DLL suivantes dans la racine de votre projet:

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

Réglez le Copie vers le répertoire de sortie propriété tous les fichiers sauf Oracle.DataAccess.dll à Copiez toujours.

Sous Projet -> Ajouter Référence ..., cliquez sur l'onglet Parcourir et sélectionnez le fichier Oracle.DataAccess.dll.

3) Utilisez le pilote avec chaîne de connexion complète (en option)

Afin de ne pas avoir à vous soucier de fichiers de noms TNS étant mis en place sur les machines de l'application a été déployée, je mis toute définition dans le fichier comme indiqué par connectionstrings.com. Il fait la chaîne de connexion un peu encombrant, mais enlève beaucoup des maux de tête de noms de fichiers TNS j'éprouvais avant:

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

est ici la classe complète j'ai utilisé pour tester le pilote:

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."); 
      } 
     } 
    } 
} 
+0

Dans mon cas, j'ai également besoin de redémarrer IIS, AppPool, Visual Studio 2010, et j'ajoute l'Env. Variable "TNS_ADMIN" et valeur le chemin du fichier TNS: "Valeur: C: \ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN". Après tout, ça marche, merci. –

1

Vous devez utiliser la bibliothèque Oracle Data Access Client, puis l'objet OracleConnection à la place.

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

Je sais que Oracle est un peu difficile avec le fichier de noms TNS. Je compte habituellement sur les DBA pour cela. SQL-Server est beaucoup plus facile à démarrer ...

+0

Merci pour la suggestion. Je ne pouvais toujours pas travailler avec les fichiers de configuration standard de tnsnames.ora/sqlnet.ora, quelle que soit la librairie que j'aie essayée. J'ai reçu la chaîne tnsnames directement des DBA, donc je ne pense pas que c'était ça ... Qui sait. – Matt

+0

J'ai fini par utiliser une entrée de noms TNS en ligne: Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = nom du serveur) (PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = nom_service))); ID utilisateur = nom d'utilisateur; Mot de passe = ********; – Matt

0

Utilisation serveur local IIS au lieu du serveur de développement Visual Studio (Paramètres du projet - WEB) a fait l'affaire pour moi!

Tns-12154 m'a fait tirer mes cheveux ... site web a bien fonctionné dans VS2008 ...

Cordialement,

Mike

0

Le code que je suis à l'aide est ci-dessus .

P.S.: J'ai testé plusieurs fois. Utilisation de 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()