ODBC Verbindung zu Oracle Datenbank aufbauen

deusfalsus

Erfahrenes Mitglied
Hallo zusammen,

alles Suchen und Finden hat mir leider nicht geholfen.
Wie genau kann ich unter Verwendung einer vorhandenen ODBC-Datenquelle (Windows, System-DSN) mit VB.Net (MS VB 2008 Express) auf jene Oracle-Datenbank zugreifen?
Ich möchte z.B. eine ListBox mit einem Abfrageergebnis befüllen.
 
Zuletzt bearbeitet:
Weil ich nicht weiß, wovon Du da schreibst.
Ich dachte, es wäre sinnvoll, den System-DSN zu verwenden, da dieser auf allen Client-PCs hier vorhanden ist.
Mein Ansatz derzeit:
Visual Basic:
Dim conn As Odbc.OdbcConnection
Dim da As Odbc.OdbcDataAdapter
Dim ds As Data.DataSet
Dim tab As Data.DataTable
Dim sConnString As String = _
       "DSN=xxx_xx_xxxxx;" & _
       "Uid=xxxxx;" & _
       "Pwd=xxxxx"

conn = New Odbc.OdbcConnection(sConnString)
conn.Open()
sql = "SELECT ....;"
da = New Odbc.OdbcDataAdapter(sql, conn)
ds = New DataSet()
da.Fill(ds)
Geht noch weiter, aber bereits beim fill bekomme ich die Meldung "ERROR [42S02] [Oracle][ODBC][Ora]ORA-00942: Tabelle oder View nicht vorhanden".
Am sql-String kanns nicht liegen. Das ist extra zum Testen ein ganz einfacher und auch überprüft.

Für besser Ansätze bin ich offen.
 
Den Oracle DataProvider for .NET werd ich mir mal anschauen.
Ist davon abgesehen irgend etwas mit meinem jetzigen Ansatz faul? Ist von der Variante generell abzuraten? Wenn ja: Warum?
Muss ich für den Oracle DataProvider auf den Clients, auf denen mein Programm mal laufen soll, zusätzliche Installationen vornehmen? Der DSN ist nämlich überall vorhanden und ich dachte, das käme mir zu Pass.
 
Was ODP.NET ist, hätte sich leicht durch eine Google-Query herausfinden lassen.

ODP.NET ist auf die Verwendung durch .NET in Verbindung mit einem Oracle-DBMS zugeschnitten. Daher ist das Teil auch wesentlich performanter. Zudem gibt's im Falle eines Fehlers auch aussagekräftigere Meldungen als über ODBC.

ODP.NET läuft nur auf Rechnern, auf denen auch der Client installiert ist (muss aber wohl generell bei Oracle der Fall sein). D.h. es wäre möglicherweise (nicht nicht schlauerweise bereits installiert) nachinstalliert werden. D.h. das Teil greift dann auch auf die installierte Konfiguration zurück.
 
Was ODP.NET ist, hätte sich leicht durch eine Google-Query herausfinden lassen.
Wenn ich etwas nicht kenne, kann ich auch nicht bei Google danach suchen. Also spar Dir Deine selbstgefälligen Bemerkungen bitte.

Der ODP.Net kommt für mich nicht infrage, da er a) bei mir nicht vorhanden ist und ich b) nicht auf allen Clients nachinstallieren kann.

Kann mir denn jemand erklären, wie ich mittels ODBC, bzw System-DSN auf meine Datenbank komme? Wo liegt der Fehler in meinem Code (s.o.)?
Was genau sagt mir die Fehlermeldung?
Wenn ich im Debug-Modus mir den Inhalt von "conn" anschaue, ist "Database" immer leer. Allerdings kann ich diesen Wert nicht belegen (zumindest weiß ich nicht, wie). Über den Connection-String kommts nicht an und direkt per conn.Database="..." erhalte ich die Meldung, der Wert sei readonly.
 
Wenn ich etwas nicht kenne, kann ich auch nicht bei Google danach suchen. Also spar Dir Deine selbstgefälligen Bemerkungen bitte.
Stimmt, ODP.NET reicht nicht aus, um ihn als Suchbegriff in die Suchmaschine deiner Wahl einzugeben. Ich vergaß.

Der ODP.Net kommt für mich nicht infrage, da er a) bei mir nicht vorhanden ist und ich b) nicht auf allen Clients nachinstallieren kann.
Ad b) Zuviele Clients, Systemvorgaben etc?

Kann mir denn jemand erklären, wie ich mittels ODBC, bzw System-DSN auf meine Datenbank komme? Wo liegt der Fehler in meinem Code (s.o.)?
Was genau sagt mir die Fehlermeldung?
Wenn ich im Debug-Modus mir den Inhalt von "conn" anschaue, ist "Database" immer leer. Allerdings kann ich diesen Wert nicht belegen (zumindest weiß ich nicht, wie). Über den Connection-String kommts nicht an und direkt per conn.Database="..." erhalte ich die Meldung, der Wert sei readonly.

Dein Connectionstring sollte eigentlich passen. Kann es sein, dass du den DSN-Wert falsch eingetragen hast bzw. den falschen Wert nimmst?

Hier kannst du dir auch noch ein Code-Snippet zu dem Thema ansehen. Vielleicht hilft dir das weiter.
 
Stimmt, ODP.NET reicht nicht aus, um ihn als Suchbegriff in die Suchmaschine deiner Wahl einzugeben. Ich vergaß.
Was soll das? Wenn ich etwas nicht kenne, kann ich nicht danach suchen!
Soll ich bei der Suchmaschine meiner Wahl etwa "der Begriff den alle außer mir kennen" eingeben? Bitte erst überlegen, dann Großkotzerei abschalten und dann schreiben.
Ich gehe davon aus, dass Leute, die hier antworten, auf dem Gebiet besser sind als ich. Sonst bräuchte ich ja nicht fragen. Du brauchst Deine Überlegenheit also nicht dauernd raushängen lassen.

Ad b) Zuviele Clients, Systemvorgaben etc?
Ist zwar irrelevant, aber es liegt an der Zahl der Clients (ca 5000).

Dein Connectionstring sollte eigentlich passen. Kann es sein, dass du den DSN-Wert falsch eingetragen hast bzw. den falschen Wert nimmst?
Als DSN-Wert nehme ich den Bezeichner aus Verwaltung\Datenquellen\SystemDSN.
In einem VB-Makro an anderer Stelle funktioniert es damit. Ist aber VBA und nicht .NET


Hier kannst du dir auch noch ein Code-Snippet zu dem Thema ansehen. Vielleicht hilft dir das weiter.
Da ich nicht mit C# arbeite, sondern VB, komme ich damit nicht weiter.
 
Was soll das? Wenn ich etwas nicht kenne, kann ich nicht danach suchen!
Soll ich bei der Suchmaschine meiner Wahl etwa "der Begriff den alle außer mir kennen" eingeben? Bitte erst überlegen, dann Großkotzerei abschalten und dann schreiben.
Ich gehe davon aus, dass Leute, die hier antworten, auf dem Gebiet besser sind als ich. Sonst bräuchte ich ja nicht fragen. Du brauchst Deine Überlegenheit also nicht dauernd raushängen lassen.
Ersetze den Teil "der Begriff den alle außer mir kennen" mit "ODP.NET", der von mir auch genannt wurde und schon hättest du nachlesen können, was das ist.

Ergo bist du mit überlegen und eventuellem Nachlesen an der Reihe ;-)

Ist zwar irrelevant, aber es liegt an der Zahl der Clients (ca 5000).
Ist nicht irrelevant. Hättest du als Antwort 2 gegeben, dann wäre ODP.NET durchaus eine Alternative. Bei 5000 natürlich angesichts des Rollout-Aufwandes eher nicht.

Da ich nicht mit C# arbeite, sondern VB, komme ich damit nicht weiter.
Mit dem Reflector kannst du dir beispielsweise C# Code auch als VB.NET Code (oder MSIL, C++.NET etc.) anzeigen lassen. Dies hilft dir auch Source zu übersetzen und für dich lesbarer zu machen. Dazu einfach kopieren, eine ClassLibrary anlegen, Klasse anlegen, einfügen, kompilieren und die Assembly anschließend im Reflector öffnen und "Anzeigeprogrammiersprache" auswählen. Voilà.
 

Neue Beiträge

Zurück