none
Oracle Zugriff auf Tabelle schlägt fehl RRS feed

  • Frage

  • Hallo,

    ich versuche zum ersten mal auf eine Oracle DB zuzugreifen.
    Die Connection steht (= open).
    Aber beim Zugriff auf die Tabelle bekomme ich eine Exception.
    Der Tabellenname ist richtig. Und der SQL funktioniert auch im Oracle DB Client.
    Da die Connection steht und der SQL-Befehl richtig ist weiß ich nicht, wo der Fehler liegen kann. 
    Unten findest Du die Fehlermeldung und meinen Code.

    Ich würde mich sehr über Hinweise zur Lösung des Problems freuen.
    Grüße von Frank.

    $exception {Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00942: table or view does not exist
       at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
       at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, OracleException& exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, IEnumerable`1 adrianParsedStmt, Boolean isDescribeOnly, Boolean isFromEF)
       at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
       at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
       at DataProvider.Repositories.MetaDataRepository.GetMetaDataList() in C:\Users\...\MataDataRepository.cs:line 71} Oracle.ManagedDataAccess.Client.OracleException

    Die Exception wird in der letzten Zeile geworfen (.Fill()).

                try
                {
                    var conn = new OracleConnection(connectionString);
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }

                    if (conn.State == ConnectionState.Open)
                    {

    DataSet dataSet = new DataSet(); OracleCommand cmd = new OracleCommand("SELECT * FROM T_RESOURCES"); cmd.CommandType = CommandType.Text; cmd.Connection = (OracleConnection) conn; using (OracleDataAdapter dataAdapter = new OracleDataAdapter()) { dataAdapter.SelectCommand = cmd; dataAdapter.Fill(dataSet); // hier passiert die Exception }



    • Bearbeitet frank me Freitag, 15. März 2019 11:48
    Freitag, 15. März 2019 11:44

Antworten

  • Hallo Frank,

    die Meldung ist recht eindeutig. Ich vermute mal, dass die Tabelle in dem Schema des Benutzers nicht existiert. Siehe dazu bspw. auch:

      Table Does Not Exist while using EF 6 and Oracle.ManagedDataAccess

    Lösung dort:

    public class EmployeeContext : DbContext {
        public DbSet<Employee> Employees { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
            modelBuilder.HasDefaultSchema("myschema");
        }
    }

    In deinem Fall nutzt Du ja kein EF, probier daher mal, das Schema direkt im SQL Statement anzugeben.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Freitag, 15. März 2019 11:49
    Moderator

Alle Antworten

  • Hallo Frank,

    die Meldung ist recht eindeutig. Ich vermute mal, dass die Tabelle in dem Schema des Benutzers nicht existiert. Siehe dazu bspw. auch:

      Table Does Not Exist while using EF 6 and Oracle.ManagedDataAccess

    Lösung dort:

    public class EmployeeContext : DbContext {
        public DbSet<Employee> Employees { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
            modelBuilder.HasDefaultSchema("myschema");
        }
    }

    In deinem Fall nutzt Du ja kein EF, probier daher mal, das Schema direkt im SQL Statement anzugeben.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Freitag, 15. März 2019 11:49
    Moderator
  • Danke Stefan !!!

    So finde ich mein Schema -Name:

    SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL

    dann:

    OracleCommand cmd = new OracleCommand("SELECT * FROM MYSCHEMA.T_RESOURCES");

    funktioniert.


    • Bearbeitet frank me Freitag, 15. März 2019 12:22
    Freitag, 15. März 2019 12:19