none
ORA-01019: Error while trying to retrieve text RRS feed

  • Frage

  • Guten Abend,

    nach mehreren Tagen verzweifelter suchen bei Google und erfolglosem rumprobieren versuche ich es mal hier.

    Ich muss für ein Schulprojekt eine Anwendung schreiben (C#) mit der ich auf meine Oracle Datenbank zugreifen kann. Diese liegt auf localhost:1521 und ist mit Oracle XE angesteuert.

    Mit dem veralteten OracleConnection habe ich eine Verbindung hinbekommen und konnte auch Inserts machen. Nur ein select ist immer eine gescheitert. Ich habe immer Fehlermeldungen bekommen. Jetzt wollte ich auf OleDBConnection wechseln, aber hierbei bekomme ich immer die Fehlermeldung "System.Data.OleDb.OleDbException (0x80004005): Error while trying to retrieve text for error ORA-01019 ...." Dieser Fehler kommt beim myconnection.Open();.

    Falls mehr Infos gebraucht werden einfach antworten.
    Über eine Antwort was ich falsch mache, bzw. einen Lösungsansatz würde ich mich natürlich freuen.

    Mit freundlichen Grüßen

    Sonntag, 4. Dezember 2016 17:43

Antworten

  • Mit dem veralteten OracleConnection habe ich eine Verbindung hinbekommen

    Hallo,

    Es ist eher genau anders rum: Der MS ODBC Driver for Oracle ist veraltet und abgekündigt und zu neueren Oracle Datenbankversionen kann man auch keine Verbindung mehr aufbauen.

    Verwende besser die original Oracle .NET Datenprovider (ODP), dann klappt das auch.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 5. Dezember 2016 07:11
  • Hi,

    wie schon gesagt, denke ich, dass es unter dem Schema "PRO" (das wird das Standardschema deines Users sein) keine Tabelle "Kunden" gibt. Schau bitte mal, unter welchem Schema diese Tabelle existiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 6. Dezember 2016 21:34
    Moderator
  • Wenn ich "select * from ..." mache

    Ein SELECT * ist ganz "böse", das solltest Du nie verwenden, sondern immer explizit die Feldnamen angeben. Bei "dr.GetString(0)" adressierst Du die Spalten über die Ordinate. Nehmen wir an, es gibt die Tabelle noch in einer anderen Datenbank, z.B. einer Test-DB, nur mit einer anderen Spaltenreihenfolge, dann bekommst Du um besten Fall einen Fehler, im schlimmsten Fall andere Daten als erwartet.

    Zum Fehler "InvalidCastException": Ist der die erste Spalte ein Feld, das Text enthält? Wenn es ein Feld von einem anderen Typen ist (numerisch, Datum, ..), kommt es nun mal zu diesem Cast Fehler.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Mittwoch, 7. Dezember 2016 07:01

Alle Antworten

  • Mit dem veralteten OracleConnection habe ich eine Verbindung hinbekommen

    Hallo,

    Es ist eher genau anders rum: Der MS ODBC Driver for Oracle ist veraltet und abgekündigt und zu neueren Oracle Datenbankversionen kann man auch keine Verbindung mehr aufbauen.

    Verwende besser die original Oracle .NET Datenprovider (ODP), dann klappt das auch.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 5. Dezember 2016 07:11
  • ODP ist ja die OracleConnection. Zumindest finde ich im Netz nur Antworten mit der OracleConnection/OracleCommand. Aber dies war ja meine erste Lösung.

    Dort bekomme ich immer ORA-00904:"XXX":invalid identifier

    Und die Tables heißen genauso wie ich sie angegeben habe....

    Dienstag, 6. Dezember 2016 18:19
  • Hi,

    auch die (veralteten) System.Data.OracleClient.OracleConnection, ... Klassen heißen so. Daher schau bitte, wie von Olaf geschrieben, ob Du wirklich ODP.NET oder doch evtl. die im .NET Framework integrierten Klassen verwendest. ODP.NET musst Du explizit installieren und/oder in dein Projekt mit aufnehmen.

    ORA-00904 ist eindeutig. Für mögliche Ursachen, die diesen Fehler hervorrufen, schau mal hier:

      http://docs.oracle.com/cd/B10501_01/server.920/a96525/e900.htm

    Um dir besser helfen zu können, ist es bei Fehlern immer sinnvoll/notwendig, den Code, der den Fehler verursacht und in deinem Fall auch das vollständige SQL Statement zu posten.

    Falls die Objektnamen an sich kein Problem darstellen (Sonderzeichen, zu lang, ...) tippe ich mal auf ein falsches/fehlendes Schema.

    Aber poste bitte zuerst die o.g. Sachen, dann schauen wir mal weiter.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community




    Dienstag, 6. Dezember 2016 18:38
    Moderator
  • Okay, habe es irgendwie jetzt geschaft auf ODP.NET zu wechseln. Aufjedenfall bekomme ich keine Fehlermeldung mehr das ich die veraltete Version verwende.

    Hier mein Code mit dem select:

     OracleConnection conn = new OracleConnection();
                    conn.ConnectionString = "DATA SOURCE=localhost:1521/xe;PERSIST SECURITY INFO=True;USER ID=PRO;PASSWORD=pro;";
                    conn.Open();
                    string sql = "select vorname from kunden";
                    OracleCommand cmd = new OracleCommand(sql, conn);
                    cmd.CommandType = CommandType.Text;
                    OracleDataReader dr = cmd.ExecuteReader();
                    dr.Read();
                    MessageBox.Show(dr.GetString(0));

    Dieser Code ist nur derzeit für ein Test der Verbindung. In der Kunden Tabelle ist nur ein Eintrag drin.

    Hier ist ein Ausschnitt unserer DB:

    Der Fehler ORA-00904 besteht aber weiterhin.

    Die Fehlermeldung gibt er mir dann bei:

                    OracleDataReader dr = cmd.ExecuteReader();
                    dr.Read();

    Wenn ich "select * from ..." mache dann bekomme ich als Fehler: System.InvalidCastException: Die angegebene Umwandlung ist ungültig. bei Oracle.DataAccess.Client.OracleDataReaderGetString(Int32 i) ...

    Wahrscheinlich ist/sind der/die Fehler komplett doof und ich bin nur blind, aber ich finde einfach keine Lösung.

    Mit freundlichen Grüßen

    Dienstag, 6. Dezember 2016 19:43
  • Hi,

    wie schon gesagt, denke ich, dass es unter dem Schema "PRO" (das wird das Standardschema deines Users sein) keine Tabelle "Kunden" gibt. Schau bitte mal, unter welchem Schema diese Tabelle existiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 6. Dezember 2016 21:34
    Moderator
  • Wenn ich "select * from ..." mache

    Ein SELECT * ist ganz "böse", das solltest Du nie verwenden, sondern immer explizit die Feldnamen angeben. Bei "dr.GetString(0)" adressierst Du die Spalten über die Ordinate. Nehmen wir an, es gibt die Tabelle noch in einer anderen Datenbank, z.B. einer Test-DB, nur mit einer anderen Spaltenreihenfolge, dann bekommst Du um besten Fall einen Fehler, im schlimmsten Fall andere Daten als erwartet.

    Zum Fehler "InvalidCastException": Ist der die erste Spalte ein Feld, das Text enthält? Wenn es ein Feld von einem anderen Typen ist (numerisch, Datum, ..), kommt es nun mal zu diesem Cast Fehler.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Mittwoch, 7. Dezember 2016 07:01