Frage

Wir verwenden eine Informix-Datenbank und stellen über ODBC erfolgreich eine Verbindung von .NET zu dieser her.Die von uns verwendete Verbindungszeichenfolge lautet;

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;

Wir möchten von ODBC wechseln und das SDK und die Bibliotheken von IBM verwenden auf ihrer Website beschrieben.

Der Code, den wir verwenden, ist;

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)
{}

Die conn.Open() löst die Ausnahme aus;

FEHLER [08001] [IBM] SQL30081N Es wurde ein Kommunikationsfehler erkannt.Verwendetes Kommunikationsprotokoll:„TCP/IP“.Verwendete Kommunikations-API:"STECKDOSEN".Ort, an dem der Fehler erkannt wurde:„172.22.0.0“.Kommunikationsfunktion erkennt den Fehler:„recv“.Protokollspezifische Fehlercode(s):"", "", "0".SQLSTATE=08001

"Ah ha!" du sagst.Geben Sie einfach ein „PROTOCOL=onsoctcp;„Aber das macht das IfxConnection(ConnectionString); Befehl werfen an ArgumentException.Wenn die Verbindungszeichenfolge eine ungültige enthält <field>=<value> Wenn Sie es festlegen, wird diese Ausnahme ausgelöst.Wenn ich trash=junk;Darin wird die gleiche ArgumentException ausgelöst, was mich glauben lässt, dass das Feld Protocol (oder PRO) nicht erkannt wird.

(Zu Ihrer Information) 172.22.0.0 ist die IP für devsrv01 und endet nicht bei 0.0.

War es hilfreich?

Lösung

Ich habe Eventaully herausgefunden, dass die Antwort lautete;

Persist Security Info=True;Authentication=Server;

Fragen Sie mich nicht warum. Ich mache es einfach zum Laufen.

+1 für alle - Danke für deine Hilfe.

Andere Tipps

Hast du überprüft http://www.connectionstrings.com/ ? Es könnte einige Einblicke bieten.

Angenommen, Sie möchten .NET, das Informix CSDK (nicht das DRDA) und ADO.NET verwenden. Der einfachste Weg, eine Verbindung herzustellen, besteht darin, die Datenbank zur Liste der Datenverbindungen in Visual Studio hinzuzufügen (Ansicht -> Server-Explorer, dann klicken). Klicken Sie auf die Schaltfläche „Mit Datenbank verbinden“ und füllen Sie dann einfach das Formular aus (Dies setzt voraus, dass Sie die Visual Studio-Erweiterungen mit dem CSDK installiert haben ...)).

Gehen Sie dann in die Eigenschaften des Projekts, gehen Sie zur Registerkarte „Einstellungen“, fügen Sie eine neue Einstellung mit dem Typ „(Verbindungszeichenfolge)“ hinzu und geben Sie für den Wert Folgendes ein:

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

In der app.config sieht es also etwa so aus:

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

Stellen Sie außerdem sicher, dass die Datenbank und der Server in der Hosts-Datei (C:\Windows\System32\drivers\etc\hosts) und/oder mit dem Informix-Datenbankverbindungstool „inetd32.exe“ irgendwo im Startmenü konfiguriert wurden. .

Wenn Sie möchten, können Sie auch Tabellen usw. aus der Datenbank im Server-Explorer-Fenster auf eine geöffnete XSD-Datei in Visual Studio ziehen, damit die Verbindungszeichenfolge automatisch zur Konfiguration hinzugefügt und alles eingerichtet wird, um einen typisierten Datensatz zu erhalten kümmert sich für Sie um die CRUD-Ebene ...(Obwohl Sie möglicherweise eine Reihe von Fehlern erhalten, da VS das Informix-Schema aus irgendeinem Grund nicht mit den neuesten Treibern abrufen kann ...)

Wie auch immer, Sie können die Verbindungszeichenfolge dann wie folgt verwenden:

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

Das IBM Informix .net Povider Guide 4.10 Handbuch verwendet eher Protokoll oder Pro als Protokoll. Sind die Schlüsselwörter mit Fallempfindlichkeit? Die Notation deutet darauf hin, dass dies sein mag, aber ich weiß nicht genug über .NET, um sicher zu sein. Und der Fehler, den Sie bei der Verwendung von Protokoll erhalten, deutet darauf hin, dass es sich um Fallsensitive handelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top