Base de données Oracle TNS La longueur de la valeur pour la clé ‘source de données’ dépasse sa limite de ‘128’

J’ai donc une chaîne de connexion à une firebase database Oracle. En fait, je l’ai copiée directement à partir du développeur SQL, puis j’ai coupé l’espace.

J’ajoute par la suite par programmation le nom d’utilisateur et le mot de passe. Le problème est que lorsque j’essaie d’ouvrir un object SQLConnection. Je reçois l’erreur:

The value's length for key 'data source' exceeds it's limit of '128' 

Je ne connais pas grand chose aux connexions Oracle TNS. J’ai utilisé cette chaîne de connexion parce qu’elle fonctionnait dans l’assistant lorsque je l’ai collée et que j’ai testé la connexion. Et ce que vous voyez est essentiellement ce que Visual studio a généré après avoir collé le nom TNS.

 Data Source="(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP) (HOST=qprd-scan.website.com)(PORT=3726))(CONNECT_DATA=(SERVER=dedicated (SERVICE_NAME=DBprd_developer)))"; 

Cette clé de source de données contient déjà environ 160 caractères.

Je regardais ce post sur les forums MSDN.

Le type dit essentiellement de couper certaines des autres parties de la source de données et de les placer ailleurs. Je ne sais pas vraiment comment faire cela.

MSDN sur les chaînes de connexion ne me dit pas grand chose.

Les chaînes MSDN sur Connection et les fichiers de configuration n’ont pas aidé non plus.

Quoi qu’il en soit, je serais heureux de montrer plus de mon code ou des choses de app.config si demandé

Vous ne nous avez pas montré le code complet que vous utilisez pour vous connecter à une firebase database, mais il semble que d’un commentaire à une autre réponse, vous utilisez OLE DB. J’éviterais de l’utiliser, surtout s’il semble y avoir une limite quelque peu arbitraire de 128 caractères pour une source de données.

Je tiens également à souligner que vous pouvez également éviter d’installer un client Oracle, comme recommandé par un autre intervenant. Je n’ai pas beaucoup d’expérience avec le client «instantané», mais le client complet est un téléchargement volumineux et n’est pas nécessaire pour pouvoir connecter un programme C # à Oracle.

Au lieu de cela, nous pouvons utiliser la bibliothèque Oracle Managed Data Access. Vous pouvez l’installer en utilisant NuGet. Pour faire ça:

  • sélectionnez Outils> Gestionnaire de packages de bibliothèque> Console du gestionnaire de packages,
  • assurez-vous que le bon projet est choisi dans la liste déroulante “Projet par défaut”,
  • entrer

     Install-Package odp.net.managed 

Cela devrait append le téléchargement de la bibliothèque à partir de NuGet et append Oracle.ManagedDataAccess aux références de votre projet.

Ensuite, si vous ajoutez une directive using pour Oracle.ManagedDataAccess.Client , le code suivant devrait parler à une firebase database Oracle:

 ssortingng connStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=)));User Id=;Password="; Console.WriteLine("Connection ssortingng has length " + connStr.Length); using (var connection = new OracleConnection() { ConnectionSsortingng = connStr }) { connection.Open(); OracleCommand command = new OracleCommand("SELECT * FROM DUAL", connection); using (OracleDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader.GetSsortingng(0)); } } } 

Voici à quoi ressemble mon app.config pour ODP.NET auquel j’accède via une bibliothèque d’entreprise personnalisée (j’ai converti la couche de données de EnterpriseLibrary5.0 de System.Data.OracleClient en Oracle.DataAccess.Client de ODP.NET. Notez que publickey est mon en a produit un qui est unique, et la version est encore mon propre numéro de version). Pourquoi est-ce que je l’ai personnalisé? Cela vient du fait que System.Data.OracleClient ne peut pas gérer CLOB s’il dépasse 32 Ko.

  

Et mon TNS dans le fichier tnsnames.ora

 TestDb= (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=10.10.10.1) (PORT=1234) ) (CONNECT_DATA= (SID=TestDb) ) ) 

J’espère que app.config et tnsnames.ora vous aideront à le comprendre.