verwendetes Datenbanksystem: IBM As400
Ahoi, da meien Suche nichts gebracht hat, versuche es mal mit nem eigenen Ticket.
Ich versuche eine ODBC-Verbindung zu einer AS400 aufzubauen.
den ClientAccess ODBC-Treiber habe ich installiert & auch in der Benutzer-DSN eine Verbindung namens IBMDA400 eingerichtet.
Jetzt versuche ich die Verbindung aufzubauen bzw. die Daten einer Tabelle abzurufen und als Meldung erhalte ich immer:
"Der 'IBMDA400'-Provider ist nicht auf dem lokalen Computer registriert."
Hier mein QC:
System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection("Driver={Client Access ODBC Driver (32-bit)};Provider=IBMDA400;User ID=" + Properties.Settings.Default.strgAs400User + ";Password=" + Properties.Settings.Default.strgAs400Passwort + ";Default Collection = "+Properties.Settings.Default.strgAs400Db+";");
System.Data.OleDb.OleDbDataAdapter daDatenAusDerAbfrage = new System.Data.OleDb.OleDbDataAdapter();
DataTable dtDatenAusDerAbfrage = new DataTable();
daDatenAusDerAbfrage.SelectCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM imp_kh", con);
System.Data.OleDb.OleDbCommandBuilder cbDatenAusDerAbfrage = new System.Data.OleDb.OleDbCommandBuilder(daDatenAusDerAbfrage);
daDatenAusDerAbfrage.Fill(dtDatenAusDerAbfrage); // hier tritt die Exception auf
Sehe ich den Wald vor lauter Bäumen nicht oder was mache ich falsch?
Schon Mal Danke für die Hilfe.
*Machts gut und danke für den vielen Fisch*
Hallo,
solltest Du wenn Du eine Datenquelle aus dem Benutzer-DSN nutzen willst, nicht eher eine OdbcConnection statt OleDbConnection
nutzen?
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Da war er, der Wald vor lauter Bäumen 😄
Habe dann jetzt auch den Verbindungsbefehl angepasst, aber leider kommt der nächste Fehler:
"ERROR [08S01] [IBM][iSeries Access ODBC-Treiber]Fehler bei Datenübertragungsverbindung. comm rc=11001 - CWBCO1004 - Auflösung der fernen Adresse nicht möglich"
System.Data.Odbc.OdbcConnection con = new System.Data.Odbc.OdbcConnection("Driver={Client Access ODBC Driver (32-bit)};System=IBMDA400;UID=" + Properties.Settings.Default.strgAS400User + ";PWD=" + Properties.Settings.Default.strgAS400Passwort + ";Default Collection = "+Properties.Settings.Default.strgAS400Db +";");
Wenn ich mich z.B. mit Access via ODBC auf die DB einklinke, läuft alles super . . . jemand ne Idee?
*Machts gut und danke für den vielen Fisch*
bzw. kann ich auch via OleDB auf die AS400 zugreifen? Wenn, wie sieht da der Verbindungsbefehl für aus?
*Machts gut und danke für den vielen Fisch*
Jo, die Befehle auf der Seite habe ich alle durch 😉
Wenn ich den OLDB Befehl nehme, behauptet er immer, dass er den Provider nicht finden kann (mein Urpsrungsproblem).
*Machts gut und danke für den vielen Fisch*
Hallo,
Auflösung der fernen Adresse nicht möglich könnte auch ein DNS-Problem sein. Kannst du mal probieren die AS400 in der Datei "C:\WINDOWS\system32\drivers\etc\hosts" einzutragen (Windows XP). Anschliessend ist glaube ich ein Neustart erforderlich.
Grüße, Koller.
Anschliessend ist glaube ich ein Neustart erforderlich.Grüße, Koller. Nein, das rafft der wenn die Datei sich ändert. Geht denn ein ping? telnet?
Ping geht, ich komme mit Access auf die AS400 drauf, ich kann mit dem ClientAccess-Datenübertratungstool auf die DB zugreifen . . .
*Machts gut und danke für den vielen Fisch*
Hallo,
ich vermute das Problem im Connection-String selbst, konkret habe ich die Stelle System=IBMDA400;
im Verdacht.
Wie kommst Du auf System, steht das in der Doku zu Deinem Treiber?
Falls nicht, probier es mal mit DSN=IBMDA400;
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Habe ich hier her:
http://www.connectionstrings.com/as-400#p61
Wenn ich System durch DSn ersetze kommt die Meldung, dass Ihm der Systemname fehlt . . . .
*Machts gut und danke für den vielen Fisch*
So, ich habe mich jetzt durch zich Seiten gewühlt & angeblich wird der .NET-Provider sowie als auch der OleDB-Provider mit der Installation vom ClientAccess installiert . . . laut Setup-Routine ist das auch installiert . . . nerv
*Machts gut und danke für den vielen Fisch*
Leg dir ma unter Windows ne ODBC Verbindung zu deiner AS 400 DB an. MIr kommt vor, als würdest du viel zu wenige Daten angeben. Zumindest erinnere ich mich, dass ich bei ner alten Anwendung, die ich für ein noch älteres AS400 System geschrieben hab ne ganze Menge an Informationen brauchte.
Unter anderem: Map, SQL Slang, IP, Port, DB-Name - was mir grad so ausm Stehgreif einfällt.
@TomLeech: Die ODBC-Verbindung habe ich doch -> IBMDA400. Und wie schon erwähnt funzt die ja auch unter Access, & Co . . . nur über .NET irgendwie nicht . . .
*Machts gut und danke für den vielen Fisch*
Guten Morgen!
Wenn man diesem Dokument (Seite 90) glauben kann, deutet die Fehlermeldung auf ein Problem mit der Namensauflösung hin. Hast du das mit der Hosts-Datei mal getestet?
BTW: Wenn es einen .Net-Provider gibt, warum verwendest du den denn nicht?
Grüße, Koller.
Seite 90 ist die Letzte & leer 😉
Ich würde gerne, aber ich finde den nicht . . . aber wie gesagt, laut Programmer's Toolkit ist der installiert, aber wenn ich das Toolkit starte kommt eine Fehlermeldung.
Ich bin jetzt im Dialog mit IBM, so dass die mir mal die neuste Version von der Client Access Software zukommen lassen . . . vielleicht erledigt sich der Fehler dann bzw. ich kann endlich den .NET Provider nutzen . . .
*Machts gut und danke für den vielen Fisch*
Hallo,
war gestern auf Brauereibesichtigung, wohl noch etwas früh heute morgen
die Infos die ich gefunden habe stehen auf Seite 43ff (pdf-Nummerierung). Wenn der Provider nicht gefunden wird, fehlt evtl. der Eintrag im GAC.
Grüße, Koller.
Ahoi 😃
Ich habe es jetzt endlich geschafft den .NET-Provider zu installieren bzw. zu erhalten. Über den kann man dann eine Verbindung zur AS400 aufbauen.
Bei der Angabe der DB + Tabelle in den Abfragen muss man die mit einem . von einander trennen und nicht wie in der Datenübertragungs-Software von IBM mit einem /
Für jeden, der damit auch mal Probleme hat, habe ich die DLL mal als Anhang beigefügt 😃
*Machts gut und danke für den vielen Fisch*
Ahoi 😃
Bei der Angabe der DB + Tabelle in den Abfragen muss man die mit einem . von einander trennen und nicht wie in der Datenübertragungs-Software von IBM mit einem /
Seit wann verwendet man in einer SQL-Abfrage / als Trenner zwischen database, table, column, etc. ? Wenn es dir nicht bewußt ist was du machst, tja dann kein Wunder dass es nicht geklappt hat.
**:::
Danke für deine konstruktive Kritik . . . wenn Du aber alles gelesen hättest, war es ledeglich ein Hinweis von mir, da in der IBM eigenen Software der / anstelle des . verwendet wird und nicht jeder so ein Schlauberger ist wie Du 😉
*Machts gut und danke für den vielen Fisch*
Schlau bin ich nicht, jedoch logisch.
Man sollte davon ausgehen, dass SQL eine genormte Sprache ist und mit / als Trenner ist doch Mist. Es mag ja sein, dass die verschiedenen DBMS sich durch die Extras wie Funktionen, Trigger, Cursor, ...etc. sich voneinander unterscheiden, aber ANSI-SQL müssen sie alle unterstützen. Von daher einfach blind auf das was im Frontend von IBM zu vertrauen und direkt in die SQL Ebene zu transportieren, tja ... das ist mehr als fragwürdig.
Das eigentliche Problem war wohl eher
Ich habe es jetzt endlich geschafft den .NET-Provider zu installieren bzw. zu erhalten.
DjBepy hat aber weder geschrieben daß die IBM-Software mit SQL arbeitet, noch daß er die Syntax in SQL übernommen hat. Er hat lediglich darauf hingewiesen daß ein Unterschied zwischen der IBM-Software und SQL besteht.
In diesem Sinne bitte ich Euch beide, zum Thema zurückzukehren.
**:::
]Aber sorry, Job bedingt konnte ich nicht jeden Tag reinschauen, aber wenn ich rein schaue und solche Unfug sehe dann muss ich leider zu Wort melden.
**:::
Danke @ MarsStein 😃
Damit kann der Thread als erledigt geschlossen werden 😃
*Machts gut und danke für den vielen Fisch*