- 3,708,670 Users
- 2,241,108 Discussions
- 7,840,528 Comments
Forum Stats
Discussions
Categories
- 7 Data
- 362.2K Big Data Appliance
- 2 Data Science
- 1K Databases
- 322 General Database Discussions
- 3.7K Java and JavaScript in the Database
- 22 Multilingual Engine
- 479 MySQL Community Space
- 3 NoSQL Database
- 7.6K Oracle Database Express Edition (XE)
- 2.7K ORDS, SODA & JSON in the Database
- 408 SQLcl
- 32 SQL Developer Data Modeler
- 184.6K SQL & PL/SQL
- 20.9K SQL Developer
- 1.3K Development
- Developer Projects
- 31 Programming Languages
- 134.5K Development Tools
- 4 DevOps
- 3K QA/Testing
- 171 Java
- 3 Java Learning Subscription
- 5 Database Connectivity
- 64 Java Community Process
- Java 25
- 7 Java APIs
- 141.1K Java Development Tools
- 2 Java EE (Java Enterprise Edition)
- 153K Java Essentials
- 132 Java 8 Questions
- 86.1K Java Programming
- 270 Java Lambda MOOC
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 5 Java SE
- 13.8K Java Security
- 3 Java User Groups
- 22 JavaScript - Nashorn
- 18 Programs
- 79 LiveLabs
- 23 Workshops
- 7 Software
- 3 Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 3 Deutsche Oracle Community
- 6 Español
- 1.9K Japanese
- 2 Portuguese
Oracle.ManagedDataAccess.4.121.1.0 System.IndexOutOfRangeException
I create a table,then get some data by a query. then I added a column into this table and try again. an exception will be throwed:
System.IndexOutOfRangeException:
在 Oracle.ManagedDataAccess.Client.OracleDataReader.RetrieveSchemaTable(DataTable& dataTable, Boolean isFromEx)
在 Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTableCopy(DataTable& dataTable, Boolean isFromEx)
在 Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTable()
在 IBatisNet.DataMapper.Commands.DataReaderDecorator.System.Data.IDataReader.GetSchemaTable()
在 System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
在 System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
在 System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
在 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
在 System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
在 System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
在 IBatisNet.DataMapper.SqlMapper.QueryForDataTable(String statementName, Object parameterObject)
Best Answer
-
Alex Keh-Oracle Posts: 2,720 Employee
The problem is usually the statement cache. Typically, a connection does not retrieve results, alter a schema, and execute the same statement again. As such, ODP.NET turns Self Tuning on by default, which auto sizes the statement cache for the app. The statement cache retains the parsed statement and metadata for later reuse. If the table has changed, the cache statement is no longer valid, which is likely why you see this error.
You can disable statement caching for individual statements by setting OracleCommand.AddToStatementCache to false. Alternatively, you can set Self Tuning to false in the connection string if these schema changes constantly occur and multiple statements will be the changes. Another alternative is to set Statement Cache Purge to true in the connection string. This setting will purge the statement cache when the connection goes back to the pool.
0
Answers
The problem is usually the statement cache. Typically, a connection does not retrieve results, alter a schema, and execute the same statement again. As such, ODP.NET turns Self Tuning on by default, which auto sizes the statement cache for the app. The statement cache retains the parsed statement and metadata for later reuse. If the table has changed, the cache statement is no longer valid, which is likely why you see this error.
You can disable statement caching for individual statements by setting OracleCommand.AddToStatementCache to false. Alternatively, you can set Self Tuning to false in the connection string if these schema changes constantly occur and multiple statements will be the changes. Another alternative is to set Statement Cache Purge to true in the connection string. This setting will purge the statement cache when the connection goes back to the pool.