ORA-01002: fetch out of sequence

Ich bin immer die folgende oracle-Fehlermeldung, wenn meine app bereitgestellt wird, auf der server nur, und nicht bei der Ausführung der exakt gleichen ausführbaren auf meiner lokalen Maschine:

ORA-01002: fetch out of sequence

Den stack-trace-Punkte für eine einfache select-Anweisung mit einer Verknüpfung, die ich erfolgreich ausführen kann über KRÖTE lokal und über SQL-Plus auf dem problem-server.

Der oberen Hälfte der stacktrace ist:

Oracle.DataAccess.Client.OracleException ORA-01002: fetch out of sequence
  at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
  at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src, Boolean bCheck)
  at Oracle.DataAccess.Client.OracleDataReader.Read()
  at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) 
  at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
  at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
  at System.Data.Common.LoadAdapter.FillFromReader(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
  at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
  at Reconciliation.Models.Legacy.EntityDbEnvironment.OpenEntity(String sql)
  at Reconciliation.Models.Legacy.EntityDbEnvironment.Open(String& sql, DataTable& datatable)
**at myProject.Checks.ExecuteSql()**

Ich kann mir nur vorstellen, das ist ein oracle client problem, aber wo soll ich suchen um dieses Problem beheben?

Haben Sie autocommit auf? Dieser Fehler wird ausgelöst, wenn Sie versuchen zu Holen einen cursor über commit (Sie sollten nicht verpflichten, innerhalb einer cursor-Schleife).
Nicht, dass wir glauben, dass die Verbindungszeichenfolge ist genau das gleiche, aber vielleicht können festgelegt werden auf dem oracle-client?
Ja, autocommit kann nur eingestellt werden, durch den client. Der Fehler kommt nicht von der SQL-Anweisung selbst, sondern aus der falschen Nutzung der cursor (fetch nach der letzten Zeile zurück, Holen nach einem commit für eine FOR UPDATE-cursor, fetch nach binden, ohne re-Ausführung oder Holen Sie nach rollback).
Ich habe einige der Forschung getan und gefunden, dass To disable Autocommit, call SQLSetConnectOption with the SQL_AUTOCOMMIT_OFF qualifier. aber wo Mach ich das? In der Dokumentation ODBC ist ziemlich schlecht.

InformationsquelleAutor m.edmondson | 2013-04-25

Schreibe einen Kommentar