ошибка при выполнении запроса: [07001] [oracle][odbc][ora]ora-01008: не все переменные привязаны

отредактировано 09:59 Раздел: FastReport .NET
Здравствуйте.

Данные для отчета берутся через ODBC соединение к ORACLE.

Если отчет сложный и в нем используется несколько раз параметров, то появляется ошибка при запросе к БД:

FastReport.Net v1.4.30
ERROR [07001] [Oracle][ODBC][Ora]ORA-01008: не все переменные привязаны

   at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at FastReport.Data.DataConnectionBase.FillTableData(DataTable table, String selectCommand, CommandParameterCollection parameters)
   at FastReport.Data.DataConnectionBase.FillTable(TableDataSource source)
   at FastReport.Data.TableDataSource.LoadData(ArrayList rows)
   at FastReport.Data.DataSourceBase.trkypstP7()
   at FastReport.Data.DataSourceBase.rcbCQnVMc(Relation , String , SortCollection , Boolean )
   at FastReport.Data.DataSourceBase.3rHQb0dLF(DataSourceBase , String , SortCollection , Boolean )
   at FastReport.DataBand.InitDataSource()
   at FastReport.GroupHeaderBand.sXeI6hYfy()
   at FastReport.Engine.ReportEngine.e0yafxMft(GroupHeaderBand )
   at FastReport.Engine.ReportEngine.XWiIvSIuBr(BandCollection )
   at FastReport.Engine.ReportEngine.LrrIFYO7Fm(ReportPage )
   at FastReport.Engine.ReportEngine.YqTI4MG1pB()
   at FastReport.Engine.ReportEngine.Tm44OcDc2(ReportPage )
   at FastReport.Engine.ReportEngine.YLA5CXoVy(Boolean , Boolean , ReportPage )
   at FastReport.Engine.ReportEngine.F5pvp0r7B(Boolean , Boolean )
   at FastReport.Report.Prepare(Boolean append)
   at FastReport.Report.Prepare()
   at SC9pJRerha4FHI5Baem.FKxE3ceCvOHpD17tLcJ.FXtLRHRl7()


кусок запроса, где используются параметры:
and  wtype_group.id_dp_org is not null
  and wtype_group.dp_num is not null
  and REQ.REQ_YEAR=to_char(to_date(:p_date,'dd.mm.yyyy'),'yyyy') /*Год*/
  and (req.ID_DO=:p_dp or :p_dp=-1)/*ДП*/
  and (wtype_group.id_dp_org=:p_contr or :p_contr=-1) /*Подрядчик*/
  and (wtype_group.dp_num=:p_dog_num or :p_dog_num=-1) /*Номер договора*/

Если обращение к параметрам убрать, то все работает. Каждый из параметров имеет тип VarChar и значение по-умолчанию задано.

Комментарии

  • отредактировано 09:59
    Добрый день.

    Я не мало времени потратил на разбирательства с подключениями к Ораклу.
    Результат таков:
    - через Odbc и OleDb не удалось добиться корректной работы с параметрами (ошибки аналогичны вашей)
    Это не значит, что оно не работает совсем, просто стандартный способ работы с параметрами не работает, а другого способа я не нашел и бросил это дело.
    - все нормально работает через подключения FastReport.Oracle и FastReport.OracleODP (скачивать в разделе "Дополнения")
    Лично я использую FastReport.OracleODP, так как используется провайдер от самого Оракла (Oracle.DataAccess.Client), который развивается и поддерживает все нововведения новых версий оракловых серверов. В свою очередь, провайдер от Майкрософт (System.Data.OracleClient) официально прекратил свое развитие.
    Да, для использования FastReport.OracleODP необходим Oracle Data Provider for .NET (ODP.NET).
  • отредактировано 09:59
    Здравствуйте,

    Как правило, подобная ошибка возникает при попытке получить схему (набор колонок) таблицы. Используется следующий стандартный код (на примере Odbc):
    DataTable table = new DataTable();
    using (OdbcConnection conn = new OdbcConnection("Connection String"))
    {
      conn.Open();
      using (OdbcDataAdapter adapter = new OdbcDataAdapter("select command", conn))
      {
        adapter.FillSchema(table, SchemaType.Source);
      }
    }
    

    За подобным поведением замечен также и стандартный System.Data.OracleClient.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.