Laden...

ODBC/OleDB Verbindung mit einer AS400 aufbauen

Erstellt von DjBepy vor 13 Jahren Letzter Beitrag vor 13 Jahren 13.768 Views
D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren
ODBC/OleDB Verbindung mit einer AS400 aufbauen

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*

3.170 Beiträge seit 2006
vor 13 Jahren

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

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

K
142 Beiträge seit 2006
vor 13 Jahren

Hallo,

schon mal hier nachgeschaut?

Grüße, Koller.

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

K
142 Beiträge seit 2006
vor 13 Jahren

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.

W
955 Beiträge seit 2010
vor 13 Jahren

Anschliessend ist glaube ich ein Neustart erforderlich.Grüße, Koller. Nein, das rafft der wenn die Datei sich ändert. Geht denn ein ping? telnet?

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

3.170 Beiträge seit 2006
vor 13 Jahren

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

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

T
146 Beiträge seit 2004
vor 13 Jahren

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.

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

@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*

K
142 Beiträge seit 2006
vor 13 Jahren

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.

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

K
142 Beiträge seit 2006
vor 13 Jahren

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.

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

1.696 Beiträge seit 2006
vor 13 Jahren

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.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

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*

1.696 Beiträge seit 2006
vor 13 Jahren

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.

Hinweis von MarsStein vor 13 Jahren

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.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

1.696 Beiträge seit 2006
vor 13 Jahren

]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.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

D
DjBepy Themenstarter:in
209 Beiträge seit 2006
vor 13 Jahren

Danke @ MarsStein 😃

Damit kann der Thread als erledigt geschlossen werden 😃

*Machts gut und danke für den vielen Fisch*