Benutzer mit den meisten Antworten
Oracle Zugriff auf Tabelle schlägt fehl

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.
$exception {Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00942: table or view does not exist
Grüße von Frank.
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
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
- Bearbeitet Stefan FalzModerator Freitag, 15. März 2019 11:54
- Als Antwort markiert frank me Freitag, 15. März 2019 12:20
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
- Bearbeitet Stefan FalzModerator Freitag, 15. März 2019 11:54
- Als Antwort markiert frank me Freitag, 15. März 2019 12:20
-
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