Question

Nous utilisons une base de données Informix et nous nous y connectons à partir de .NET en utilisant ODBC. La chaîne de connexion que nous utilisons est;

DRIVER={IBM INFORMIX ODBC RIVER};
UID=username; PWD=password;
DATABASE=our_database;
HOST=devsrv01;
SERVER=devsrv01_tcp;
SERVICE=ids9tcp2;
PROTOCOL=onsoctcp;
CLIENT_LOCALE=en_US.CP1252;
DB_LOCALE=en_US.819;

Nous souhaitons quitter ODBC et utiliser le kit SDK et les bibliothèques IBM sous la forme décrit sur leur site .

Le code que nous utilisons est;

string ConnectionString = "Database=our_database; Server=172.22.0.0:1528; UID=username; Password=password; ";

try
{                               
    IfxConnection conn = new IfxConnection(ConnectionString);
    conn.Open();
}
catch (IfxException ex)
{}

Le conn.Open () lève l'exception;

ERREUR [08001] [IBM] SQL30081N Une erreur de communication a été détectée. Protocole de communication utilisé: & "; TCP / IP &"; API de communication utilisée: & "SOCKETS &"; Emplacement où l'erreur a été détectée: & Quot; 172.22.0.0 & Quot ;. Fonction de communication détectant l'erreur: & Quot; recv & Quot ;. Code (s) d'erreur spécifique au protocole: & "; &"; & "; &"; & "0 &". SQLSTATE = 08001

& "Ah, ha! &" vous dites. Il suffit de mettre dans & Quot; PROTOCOL=onsoctcp; & Quot; Mais cela fait que la commande IfxConnection(ConnectionString); envoie un ArgumentException. Si la chaîne de connexion contient un paramètre non valide <field>=<value>, cette exception est levée. Si je mets à la poubelle = ordure; en elle lance la même ArgumentException, ce qui me fait penser qu’elle ne reconnaît pas le champ Protocol (ou PRO).

(FYI) 172.22.0.0 est l'IP de devsrv01 et ne se termine pas 0.0.

Était-ce utile?

La solution

J'ai finalement découvert que la réponse était d'inclure;

Persist Security Info=True;Authentication=Server;

Ne me demandez pas pourquoi. Je le fais juste fonctionner.

+1 pour tout le monde - merci de votre aide.

Autres conseils

Avez-vous vérifié http://www.connectionstrings.com/ ? Cela pourrait donner un aperçu.

En supposant que vous souhaitiez utiliser .NET, Informix CSDK (et non DRDA) et ADO.NET, le moyen le plus simple de vous connecter consiste à ajouter la base de données à la liste des connexions de données de Visual Studio (View - & Explorateur de serveurs, puis cliquez sur le bouton & "Connexion à la base de données &", puis remplissez simplement le formulaire (cela suppose que vous avez installé les extensions Visual Studio avec le CSDK ...)).

Ensuite, allez dans les propriétés du projet, allez dans l'onglet Paramètres, ajoutez un nouveau paramètre avec le type '(Chaîne de connexion)' et pour la valeur indiquée:

 Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"

Donc, dans le fichier app.config, cela ressemblera à ceci:

 <add name="MyApplication.Properties.Settings.MyConnectionString"
  connectionString="Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
  providerName="IBM.Data.Informix" />

Assurez-vous également que la base de données et le serveur ont été configurés dans le fichier hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts) et / ou avec l'outil de connexion à la base de données Informix 'inetd32.exe' situé dans le menu Démarrer. quelque part ...

Si vous le souhaitez, vous pouvez également faire glisser des tables, de la base de données de la fenêtre de l'Explorateur de serveurs vers un fichier XSD ouvert dans Visual Studio, afin d'ajouter automatiquement la chaîne de connexion à la configuration et de configurer le tout ensemble de données et il va gérer la couche CRUD pour vous ... (Bien que vous pourriez obtenir un tas d'erreurs parce que VS ne peut pas extraire le schéma Informix en utilisant les derniers pilotes pour une raison quelconque ...)

Quoi qu'il en soit, vous pouvez ensuite utiliser la chaîne de connexion telle que:

IfxConnection myconnection = new IfxConnection(MyApplication.Properties.Settings.Default.MyConnectionString);

Le IBM Informix .NET Le guide Povider 4.10 manuel utilise Protocol ou PRO plutôt que PROTOCOL. Les mots-clés sont-ils sensibles à la casse? La notation suggère que ce pourrait être le cas, mais je ne connais pas suffisamment le .NET pour en être sûr. Et l'erreur que vous obtenez lorsque vous utilisez PROTOCOL suggère qu'il pourrait être sensible à la casse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top